2011-09-26 92 views
32

所以也许我只是没有找对了地方,但我找不到怎么做的jQuery的的jQuery的香草JavaScript版本。点击

$('a').click(function(){ 
    // code here 
}); 

等同于普通的旧JavaScript的一个很好的解释?

基本上我想运行一个函数,每次点击一个a标签,但我没有能力加载jQuery到页面上面的方式做到这一点,所以我需要知道如何使用普通JavaScript的。

回答

39

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

的Html

<a href="something">CLick Here</a> 
<a href="something">CLick Here</a> 
<a href="something">CLick Here</a> 

的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; 
    }; 
} 
+1

+1我建议你用';'结束函数*表达式*。 – pimvdb

+0

哎呀好抓。 –

+0

我不同意。恕我直言,你可能会破坏以前的界限功能。我认为使用“addEventListener”要好得多。 –

5

在这里你去:

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

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

(不IE8工作)

另外,我建议事件委派...

+2

你有没有不使用'[] .forEach.call(...)'的理由? – pimvdb

+0

@pimvdb好吧,'call'不适合,因为一个函数必须传递给'forEach'。我们必须使用'apply',所以:'[] .forEach.apply(...,[function(){}]);'。 '[函数(){}]'符号有点奇怪我的口味... –

+3

我的意思是http://jsfiddle.net/8Lvzc/1/。 – pimvdb

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

你必须找到元素和d做一个循环来连接每一个。

6
document.getElementById('elementID').onclick = function(){ 
     //click me function! 
} 
+0

啊......应该指出,我不会知道'a'标签或标识,所以只需要说“对于任何标签点击.....” –

1

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

var links = document.getElementsByTagName("a"); 
var linkClick = function() { 
    //code here 
}; 

for(var i = 0; i < links.length; i++){ 
    links[i].onclick = linkClick; 
} 

你可以在行动here看到它。

11

请尝试以下

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); 
} 

注意:由于Ӫ_._Ӫ指出,这不会对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); 
} 
+2

不要在循环内创建函数。最好在循环外部创建函数,并引用循环内部的函数。 –

+0

@PeterOlson主要是我试图复制原始问题的风格。我会更新它在这个意义上更正确 – JaredPar

+0

应该注意的是,IE8和更低版本不支持'addEventListener'。 – user113716