如何将参数传递给事件处理程序?
问题描述:
var MyObject = {
init: function() {
this.items = $('#menu a');
for (var i = 0; i < this.items.length; i++) {
$(this.items[i]).bind('click', this.doSomething);
}
},
doSomething: function (index) {
alert(this.items[index].innerHTML);
// alerts: One, Two, Three
}
};
我需要通过索引(i)如何将参数传递给事件处理程序?
答
有没有必要在这里传递一个指标,由于this
将引用您要在click
事件处理程序中单击的元素,因此您可以这样做:
var MyObject = {
init: function() {
this.items = $('#menu a');
this.items.bind('click', this.doSomething);
},
doSomething: function() {
alert(this.innerHTML);
}
};
答
试试这个,看看它是否工作:
var MyObject = {
init: function() {
this.items = $('#menu a');
for (var i = 0; i < this.items.length; i++) {
$(this.items[i]).bind('click', {index:i}, this.doSomething);
}
},
doSomething: function (e) {
alert(e.data.index);
}
};
是的,但我需要“this”将成为MyObject,而不是触发事件的元素“a”。 – Luistar15 2010-10-29 01:39:21
@ Luistar15 - 在事件处理程序中情况并非如此,this指的是元素,如果您希望它指向元素,最好创建一个像您所指向的“self”的变量,或更改上下文的处理程序......但只有一个变量的副本,只要执行'MyObject'来引用它,除非我失去了一些东西? – 2010-10-29 01:41:23
我明白了,是的,它只有一个副本。所以,我不能做这样的事情(http://jsfiddle.net/mUjAj/2/)? jquery版本将是(http://jsfiddle.net/mUjAj/3/)。那么,我不能用“this”来指代“MyObject”吗?或者有什么办法? – Luistar15 2010-10-29 02:53:45