Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery的普通JavaScript版本。单击_Javascript_Jquery_Function_Event Handling - Fatal编程技术网

jQuery的普通JavaScript版本。单击

jQuery的普通JavaScript版本。单击,javascript,jquery,function,event-handling,Javascript,Jquery,Function,Event Handling,所以,也许我只是找不到合适的地方,但我找不到一个很好的解释,说明如何做jQuery的等价物 $('a').click(function(){ // code here }); 用普通的老JavaScript 基本上,我想在每次单击标记时运行一个函数,但我没有能力将jQuery加载到页面中,以上面的方式进行操作,因此我需要知道如何使用纯JavaScript进行操作。给你: [].forEach.call( document.querySelectorAll( 'a' ), functio

所以,也许我只是找不到合适的地方,但我找不到一个很好的解释,说明如何做jQuery的等价物

$('a').click(function(){
    // code here
});
用普通的老JavaScript

基本上,我想在每次单击
标记时运行一个函数,但我没有能力将jQuery加载到页面中,以上面的方式进行操作,因此我需要知道如何使用纯JavaScript进行操作。

给你:

[].forEach.call( document.querySelectorAll( 'a' ), function ( a ) {
    a.addEventListener( 'click', function () {
        // code here
    }, false );
});
现场演示:

(在IE8中不起作用)

另外,我推荐活动代表团

element.addEventListener('click', function() { ... }, false);

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

这将为每个
a
元素分配一个
onclick
函数

document.getElementById('elementID').onclick = function(){
      //click me function!
}
var links = document.getElementsByTagName("a");
var linkClick = function() {
  //code here
};

for(var i = 0; i < links.length; i++){
  links[i].onclick = linkClick;
}
var links=document.getElementsByTagName(“a”);
var linkClick=函数(){
//代码在这里
};
对于(变量i=0;i
您可以看到它正在运行。

请尝试以下操作

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);
}
工作示例:

Html


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;
    };
}
var-anchors=document.getElementsByTagName('a');
对于(var z=0;z
我刚刚偶然发现了这个老问题

对于新浏览器(请在此处找到支持:)

我的解决办法是:

function clickFunction(event) {
  // code here
}

for (let elm of document.querySelectorAll("a")) {
  elm.onclick = clickFunction;
}
这已优化为不为每个元素创建新函数


将适用于IE9及以上版本。

您是否有理由不使用
[].forEach.call(…)
?@pimvdb那么,
call
是不合适的,因为必须将函数传递到
forEach
。必须使用
apply
,因此:
[].forEach.apply(…,[function(){}])
[function(){}]
符号对我来说有点奇怪……不要在循环中创建函数。最好在循环外创建函数,并引用循环内的函数。@PeterOlson我主要是想复制原始问题的风格。我将更新它,使其在这个意义上更加正确。可能需要注意的是,IE8和更低版本不支持
addEventListener
@u1258;。IE8的替代方案是什么?嗯,没有确切的替代方案。它们确实有
attachEvent
,但是它不接受第三个参数来设置冒泡/捕获(冒泡是默认的),并且它没有将
这个
设置为调用处理程序的元素,但是使用闭包可以解决这个问题。啊。。。应该指出的是,我事先不知道“a”标签或ID,所以只需要说“对于点击的任何a标签…”我不同意。IMHO您可以销毁上一个绑定函数。我认为使用“addEventListener”要好得多。它更容易阅读,但并没有以任何方式进行优化。您仍然可以有效地在元素数组中循环。你是对的!我读了一些书,分心了。更圆滑的解决方案是使用for of循环。(编辑了我的解决方案),这很酷,但我注意到它将覆盖任何现有的onclick处理程序
var anchors = document.getElementsByTagName('a');
for(var z = 0; z < anchors.length; z++) {
    var elem = anchors[z];   
    elem.onclick = function() {
        alert("hello");
        return false;
    };
}
function clickFunction(event) {
  // code here
}

for (let elm of document.querySelectorAll("a")) {
  elm.onclick = clickFunction;
}