我在google和stackoverflow上搜索和搜索过,如果我错了,请重定向我,但没有任何内容能直接解决我想要的问题。
我列出了三个项目,我想创建一个动作监听器(onclick),它将一个函数调用到window.open(myURL, '_blank')
并转到该URL。
function goToURL (at) {
window.open(myURL[at], '_blank');
};
for (var i = 0; i < document.getElementsByTagName("li").length; i++) {
document.getElementsByTagName("li")[i].onclick = goToURL(i);
}
现在它不仅忽略了onclick,而且还立即打开了所有的URL。
我检查了文档,它只需要函数名称()
。但即使没有参数,它也不起作用。因此,如果我无法传递参数,我就无法分配不同的URL。
我知道可能还有另一种方法可以让我这样做,但是就像传递一个参数一样简单我应该能够弄明白。
http://jsfiddle.net/gymbry/7MG7P/
提前致谢!
答案 0 :(得分:1)
您必须为onclick
分配一项功能。您正在立即调用该函数并为其分配返回值。如果你不必将参数传递给函数,你可以这样做:
document.getElementsByTagName("li")[i].onclick = goToURL;
请注意,函数名后面没有()
。我们没有调用函数,我们只是指函数本身。
如果要传递依赖于循环变量的参数,则必须注意"closure in a loop" problem。
最终你可以这样做:
document.getElementsByTagName("li")[i].onclick = (function(i) {
return function() {
goToURL(i);
};
}(i));
由于您使用jQuery标记了问题,因此您可以将其简化为:
$('li').each(function(i) {
$(this).data('url', myURL[i]);
}).click(function() {
window.open($(this).data('url'), '_blank');
});