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

在javascript中将参数传递给onclick actionlistener函数,javascript,jquery,onclick,click,parameter-passing,Javascript,Jquery,Onclick,Click,Parameter Passing,我在谷歌和stackoverflow上搜索了又搜索,如果我错了,请重定向我,但没有任何东西能直接说明我在寻找什么 我列出了三个项目,我想为每个项目创建一个动作监听器(onclick),它调用一个函数来window.open(myURL,'.\u blank'),然后转到该URL function goToURL (at) { window.open(myURL[at], '_blank'); }; for (var i = 0; i < docume

我在谷歌和stackoverflow上搜索了又搜索,如果我错了,请重定向我,但没有任何东西能直接说明我在寻找什么

我列出了三个项目,我想为每个项目创建一个动作监听器(onclick),它调用一个函数来
window.open(myURL,'.\u 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);
    }
函数gotour(at){
window.open(myURL[at],'u blank');
};
对于(var i=0;i
现在,它不仅忽略了onclick,而且一次打开了所有URL。 我查看了文档,它只调用了函数名no
()
。但即使没有参数,它也不起作用。所以,如果我不能传递参数,我就无法分配不同的URL。 我知道可能有另一种方法可以做到这一点,但只要传递一个参数,我就应该能够找到它


提前谢谢

您必须为单击
onclick
指定一个函数。您将立即调用该函数并为其指定返回值。如果不必向函数传递参数,可以执行以下操作:

document.getElementsByTagName("li")[i].onclick = goToURL;
请注意,函数名后面没有
()
。我们不是在调用函数,我们只是指函数本身

如果您想要传递一个依赖于循环变量的参数,那么您必须知道

最终,您可以执行以下操作:

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

甚至连我的第一句话都没打出来…:\