Vanilla JavaScript版jQuery .click

Duc*_*ard 47 javascript jquery function event-handling

所以也许我只是没有找到合适的地方,但我找不到如何做相当于jQuery的一个很好的解释

$('a').click(function(){
    // code here
});
Run Code Online (Sandbox Code Playgroud)

在简单的旧JavaScript?

基本上我想在每次a单击标签时运行一个函数,但是我没有能力将jQuery加载到页面中以上面的方式执行它所以我需要知道如何使用纯JavaScript来完成它.

Kev*_*sox 57

工作示例:http://jsfiddle.net/6ZNws/

HTML

<a href="something">CLick Here</a>
<a href="something">CLick Here</a>
<a href="something">CLick Here</a>
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

var anchors = document.getElementsByTagName('a');
for(var z = 0; z < anchors.length; z++) {
    var elem = anchors[z];   
    elem.onclick = function() {
        alert("hello");
        return false;
    };
}
Run Code Online (Sandbox Code Playgroud)

  • 我不同意。恕我直言,您可能会破坏先前的绑定功能。我认为使用“ addEventListener”要好得多。 (4认同)

Dio*_*ane 47

element.addEventListener('click', function() { ... }, false);
Run Code Online (Sandbox Code Playgroud)

你必须找到元素并创建一个循环来连接每个元素.


Jar*_*Par 14

请尝试以下方法

var clickHandler = function() { 
  // Your click handler
};

var anchors = document.getElementsByTagName("a");
for (var i = 0; i < anchors.length; i++) {
  var current = anchors[i];
  current.addEventListener('click', clickHandler, false);
}
Run Code Online (Sandbox Code Playgroud)

注意:由于Ӫ_._Ӫ指出这不适用于IE8,因为它不支持addEventListener.

在IE8上,您可以使用以下订阅onclick.它不是一个完美的替代品,因为它需要每个人合作,但它可能能够帮助你

var subscribeToOnClick = function(element) {
  if (element.onclick === undefined) {
    element.onclick = clickHandler;
  } else {
    var saved = element.onclick;
    element.onclick = function() {
      saved.apply(this, arguments);
      clickHandler.apply(this, arguments);
    }
  }
}

for (var i = 0; i < anchors.length; i++) {
  var current = anchors[i];
  subscribeToOnClick(current);
}
Run Code Online (Sandbox Code Playgroud)

  • 不要在循环内创建函数.最好在循环外创建函数并引用循环内的函数. (2认同)

Nea*_*eal 10

document.getElementById('elementID').onclick = function(){
      //click me function!
}
Run Code Online (Sandbox Code Playgroud)


Šim*_*das 7

干得好:

[].forEach.call( document.querySelectorAll( 'a' ), function ( a ) {
    a.addEventListener( 'click', function () {
        // code here
    }, false );
});
Run Code Online (Sandbox Code Playgroud)

现场演示: http ://jsfiddle.net/8Lvzc/3/

(在IE8中不起作用)

另外,我建议事件授权......

  • 你有理由不使用`[].forEach.call(...)`? (2认同)

Tho*_*sik 6

我刚刚偶然发现了这个老问题。

对于新浏览器(在此处查找支持:https://caniuse.com/? search=querySelectorAll )

我的解决方案是:

function clickFunction(event) {
  // code here
}

for (let elm of document.querySelectorAll("a")) {
  elm.addEventListener('click', clickFunction);
}
Run Code Online (Sandbox Code Playgroud)

经过优化,不会为每个元素创建新函数。这将为每个元素添加一个“单击”事件监听器,因此如果多次执行此操作,每个元素的多个事件监听器将被调用。

要替换/设置“单击”事件监听器,请使用以下代码:

for (let elm of document.querySelectorAll("a")) {
  elm.onclick = clickFunction;
}
Run Code Online (Sandbox Code Playgroud)

适用于 IE9 及更高版本。