Answers:
您需要发送ID作为功能参数。像这样做:
<button id="1" onClick="reply_click(this.id)">B1</button>
<button id="2" onClick="reply_click(this.id)">B2</button>
<button id="3" onClick="reply_click(this.id)">B3</button>
<script type="text/javascript">
function reply_click(clicked_id)
{
alert(clicked_id);
}
</script>
这将发送ID this.id
作为clicked_id
您可以在您的函数中使用。在这里查看实际操作。
event.target.id
(对我来说,Firefox和IE都抛出了该异常),这是一个可在所有三种主要浏览器上使用的出色解决方案。
通常,如果您将代码和标记分开,则事情更容易保持井井有条。定义所有元素,然后在JavaScript部分中,定义应在这些元素上执行的各种操作。
调用事件处理程序时,将在被单击的元素的上下文中调用该事件处理程序。因此,标识这将参考的DOM元素,你点击。然后,您可以通过该标识符访问元素的属性。
例如:
<button id="1">Button 1</button>
<button id="2">Button 2</button>
<button id="3">Button 3</button>
<script type="text/javascript">
var reply_click = function()
{
alert("Button clicked, id "+this.id+", text"+this.innerHTML);
}
document.getElementById('1').onclick = reply_click;
document.getElementById('2').onclick = reply_click;
document.getElementById('3').onclick = reply_click;
</script>
使用纯JAVASCRIPT:我知道已经很晚了,但可能对将来的人有帮助:
在HTML部分:
<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>
在Javascipt控制器中:
function reply_click()
{
alert(event.srcElement.id);
}
这样,在调用javascript函数时,我们不必绑定Element的“ id”。
this
参数来解决它onClick
(实际上,不是使用onClick而是onChange,这可能是问题吗?)。我也检查了一下,似乎对此event
变量产生了很多困惑-是“隐式”参数还是必须将其明确声明为参数(即function reply_click(event)
,我也已经在一些位置)?它仅在通过addEventListener
... 分配事件侦听器时可用吗?我玩过,但无法正常工作。
(我觉得 id
属性需要以字母开头。可能是错误的。)
您可以去参加活动委托...
<div onClick="reply_click()">
<button id="1"></button>
<button id="2"></button>
<button id="3"></button>
</div>
function reply_click(e) {
e = e || window.event;
e = e.target || e.srcElement;
if (e.nodeName === 'BUTTON') {
alert(e.id);
}
}
...但是这要求您相对熟悉古怪的事件模型。
e
参数都是自动生成的。如果不是,那么我们必须处理IE6-8,它通过来提供该有用的对象window.event
。
通常建议避免使用内联JavaScript,但是很少有如何使用内联JavaScript的示例。
这是我将事件附加到按钮的方式。
我对推荐的方法与简单onClick
属性相比要花多长时间并不完全满意。
<button class="btn">Button</button>
<script>
let OnEvent = (doc) => {
return {
on: (event, className, callback) => {
doc.addEventListener('click', (event)=>{
if(!event.target.classList.contains(className)) return;
callback.call(event.target, event);
}, false);
}
}
};
OnEvent(document).on('click', 'btn', function (e) {
window.console.log(this, e);
});
</script>
<!DOCTYPE html>
<html>
<head>
<script>
(function(doc){
var hasClass = function(el,className) {
return el.classList.contains(className);
}
doc.addEventListener('click', function(e){
if(hasClass(e.target, 'click-me')){
e.preventDefault();
doSomething.call(e.target, e);
}
});
})(document);
function insertHTML(str){
var s = document.getElementsByTagName('script'), lastScript = s[s.length-1];
lastScript.insertAdjacentHTML("beforebegin", str);
}
function doSomething(event){
console.log(this.id); // this will be the clicked element
}
</script>
<!--... other head stuff ...-->
</head>
<body>
<!--Best if you inject the button element with javascript if you plan to support users with javascript disabled-->
<script>
insertHTML('<button class="click-me" id="btn1">Button 1</button>');
</script>
<!--Use this when you don't care about broken buttons when javascript is disabled.-->
<!--buttons can be used outside of forms https://stackoverflow.com/a/14461672/175071 -->
<button class="click-me" id="btn2">Button 2</button>
<input class="click-me" type="button" value="Button 3" id="btn3">
<!--Use this when you want to lead the user somewhere when javascript is disabled-->
<a class="click-me" href="/path/to/non-js/action" id="btn4">Button 4</a>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
(function(doc){
var cb_addEventListener = function(obj, evt, fnc) {
// W3C model
if (obj.addEventListener) {
obj.addEventListener(evt, fnc, false);
return true;
}
// Microsoft model
else if (obj.attachEvent) {
return obj.attachEvent('on' + evt, fnc);
}
// Browser don't support W3C or MSFT model, go on with traditional
else {
evt = 'on'+evt;
if(typeof obj[evt] === 'function'){
// Object already has a function on traditional
// Let's wrap it with our own function inside another function
fnc = (function(f1,f2){
return function(){
f1.apply(this,arguments);
f2.apply(this,arguments);
}
})(obj[evt], fnc);
}
obj[evt] = fnc;
return true;
}
return false;
};
var hasClass = function(el,className) {
return (' ' + el.className + ' ').indexOf(' ' + className + ' ') > -1;
}
cb_addEventListener(doc, 'click', function(e){
if(hasClass(e.target, 'click-me')){
e.preventDefault ? e.preventDefault() : e.returnValue = false;
doSomething.call(e.target, e);
}
});
})(document);
function insertHTML(str){
var s = document.getElementsByTagName('script'), lastScript = s[s.length-1];
lastScript.insertAdjacentHTML("beforebegin", str);
}
function doSomething(event){
console.log(this.id); // this will be the clicked element
}
</script>
<!--... other head stuff ...-->
</head>
<body>
<!--Best if you inject the button element with javascript if you plan to support users with javascript disabled-->
<script type="text/javascript">
insertHTML('<button class="click-me" id="btn1">Button 1</button>');
</script>
<!--Use this when you don't care about broken buttons when javascript is disabled.-->
<!--buttons can be used outside of forms https://stackoverflow.com/a/14461672/175071 -->
<button class="click-me" id="btn2">Button 2</button>
<input class="click-me" type="button" value="Button 3" id="btn3">
<!--Use this when you want to lead the user somewhere when javascript is disabled-->
<a class="click-me" href="/path/to/non-js/action" id="btn4">Button 4</a>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
(function($){
$(document).on('click', '.click-me', function(e){
doSomething.call(this, e);
});
})(jQuery);
function insertHTML(str){
var s = document.getElementsByTagName('script'), lastScript = s[s.length-1];
lastScript.insertAdjacentHTML("beforebegin", str);
}
function doSomething(event){
console.log(this.id); // this will be the clicked element
}
</script>
<!--... other head stuff ...-->
</head>
<body>
<!--Best if you inject the button element with javascript if you plan to support users with javascript disabled-->
<script type="text/javascript">
insertHTML('<button class="click-me" id="btn1">Button 1</button>');
</script>
<!--Use this when you don't care about broken buttons when javascript is disabled.-->
<!--buttons can be used outside of forms https://stackoverflow.com/a/14461672/175071 -->
<button class="click-me" id="btn2">Button 2</button>
<input class="click-me" type="button" value="Button 3" id="btn3">
<!--Use this when you want to lead the user somewhere when javascript is disabled-->
<a class="click-me" href="/path/to/non-js/action" id="btn4">Button 4</a>
</body>
</html>
您可以在文档准备好之前运行此程序,因为我们将事件附加到文档上,所以单击按钮将起作用。
这是一个jsfiddle。
出于某种奇怪的原因insertHTML
,即使该功能在我所有的浏览器中都有效,该功能也无法在其中使用。
如果您不介意缺点,可以随时替换insertHTML
为document.write
<script>
document.write('<button class="click-me" id="btn1">Button 1</button>');
</script>
资料来源:
如果您不想将任何参数传递给onclick函数,只需使用event.target
即可获取clicked元素:
<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>
function reply_click()
{
// event.target is the element that is clicked (button in this case).
console.log(event.target.id);
}
使用纯JavaScript,您可以执行以下操作:
var buttons = document.getElementsByTagName("button");
var buttonsCount = buttons.length;
for (var i = 0; i < buttonsCount; i += 1) {
buttons[i].onclick = function(e) {
alert(this.id);
};
}
在JsFiddle上检查
对不起,它的回答很晚,但是如果您这样做,它的确很快:-
$(document).ready(function() {
$('button').on('click', function() {
alert (this.id);
});
});
这将获得单击的任何按钮的ID。
如果您只想在特定位置获得按钮点击的价值,只需将它们放在类似
<div id = "myButtons"> buttons here </div>
并将代码更改为:-
$(document).ready(function() {
$('.myButtons button').on('click', function() {
alert (this.id);
});
});
我希望这有帮助