在javascript中将参数传递给onclick actionlistener函数

时间:2013-11-30 01:18:06

标签: javascript jquery onclick click parameter-passing

我在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/

提前致谢!

1 个答案:

答案 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');
});