我在一个名为“item”的类中有大约12个div元素
我使用for循环将onClick javascript函数附加到每个函数:
for(var i = 0; i < $$(".item").length; i++){
$$(".item")[i].observe("click", detailPopup);
}
所以,如果我点击任何属于“item”类的元素,它将运行“detailPopup”函数。但我想将参数传递给该函数。更具体地说,我希望传递“this”()。
我该怎么做?
我认为我的问题尽可能具体,但如果我没有,请告诉我,我会澄清我的问题。
谢谢!
答案 0 :(得分:2)
您可以将this
绑定到函数:
for(var i = 0; i < $$(".item").length; i++){
$$(".item")[i].observe("click", detailPopup.bind(this));
}
答案 1 :(得分:2)
虽然我自己没有明确尝试过,但我相信你应该burn in你的参数。
$$('.item').invoke('observe', 'click', detailPopup.curry(this));
然后将在所有其他参数之前传递对this
的引用。您的功能可能类似于以下内容......
function detailPopup(parent, event)
{
...
this
的原始含义是为处理程序的范围保留的,即触发元素的范围。此外,我使用invoke
来避免所有乱用索引值和匿名函数和东西。
答案 2 :(得分:1)
您需要创建一个匿名函数。代替detailPopup
,您应该输入类似:function() { detailPopup(that); }
什么是that
?由于this
的值未传输到嵌套函数,因此需要先将其分配给变量,然后才能使用它。示例:var that = this;
var that = this;
for(var i = 0; i < $$(".item").length; i++){
$$(".item")[i].observe("click", function() { detailPopup(that); });
}
答案 3 :(得分:0)
你可以这样做:
for(var i = 0; i < $$(".item").length; i++){
(function(t){
$$(".item")[i].observe("click", function { detailPopup(t); });
})(this);
}
(function(t){ ... })(this);
是一个闭包,可确保this
是正确的此,否则您将获得范围问题。这在一些情况下很重要,因为循环就是其中之一。如果你没有for循环,你可以这样做:
$$(".item")[i].observe("click", function { detailPopup(someParameter); });