如何将点击事件分配给javascript中的多个按钮?

时间:2014-03-03 18:40:07

标签: javascript jquery

单行中Javascript中的以下语句相当于什么?

$("#element1,#element2").on("click", runFunction);

3 个答案:

答案 0 :(得分:2)

例如:

var f = function() { /* Event handler */ },
    els = document.querySelector(/* selector */);
for(var i=0, l=els.length; i<l; ++i)
    els[i].addEventListener('click', f, false);

只需删除换行符,它就会在一行中。

但是在ES6中你可以接近:

for(var el of document.querySelector(/* selector */)) el.addEventListener('click', f, false);

答案 1 :(得分:1)

简单地通过不在代码中保留任何空间来做到这一点

e1=document.getElementById('element1'),e2=document.getElementById('element2');if(addEventListener){e1.addEventListener('click',runFunction,false);e2.addEventListener('click',runFunction,false);}else{e1.attachEvent('click',runFunction);e2.attachEvent('click',runFunction);}

答案 2 :(得分:0)

几乎可以肯定,你真正想要的是:

jQuery的事件委派(see jQuery's .on() documentation)

这是每个人正在寻找的东西,即使他们还没有意识到这一点;)

不要直接将处理程序绑定到元素上 - 将处理程序绑定到父元素(可能是&lt; body&gt;),并使用jQuery的事件委托模型来指定筛选冒泡子事件的选择器。在以下情况中,我们在<body>上放置了一个点击处理程序,该处理程序指定用于触发a[href]链接点击。

// Handles all link clicks under the <body> tag (superior methodology -- much optimum)
$('body').on('click','a[href]',function(jqEvent){
  var $a = $(this);
  console.log("Link Clicked:",$a.attr('href'));
});

// Direct binding, which is essentially what the original asker had (inferior)
$('a[href]','body').on('click',function(jqEvent){
  var $a = $(this);
  console.log("Link Clicked:",$a.attr('href'));
});