像这样的代码
var test = function (e,name) {
this.e = e;
this.name = name;
this.init();
};
test.prototype.init = function () {
var $e = $(this.e);
var _this = this;
$e.click(function () {
alert(_this.name);
//show the current name
});
$('#AA').click(function () {
alert(_this.name);
//show all the name
})
};
new test($("#A"),"A");
new test($("#B"),"B");
为什么点击“$ e”只显示当前名称,
点击“$('#AA')”显示所有名称
jsfiddle
谢谢!
答案 0 :(得分:3)
这是因为您调用:
$('#AA').click(function () {
alert(_this.name);
//show all the name
})
#A
和#B
。
当您致电:new test($("#A"),"A");
时,会调用方法init
,这会导致点击回调的附件,因此当您点击#AA
A
时会收到提醒。< / p>
之后,您致电:new test($("#B"),"B");
。这会导致init
调用不同的值。还有一个点击处理程序附加到#AA
,因此当您点击该元素时,您会收到两个警报。
答案 1 :(得分:2)
因为#AA
的点击处理程序已附加两次。
new test($("#A"),"A");
new test($("#B"),"B");
您致电test
构造函数两次,一次针对#A
,一次针对#B
。 init
被调用两次,所以
$('#AA').click(function () {
alert(_this.name);
//show all the name
})
也将运行两次。
在高级事件处理模型(addEventListener
中,jQuery当然也使用它)事件处理程序不会互相替换(比如旧的onclick
和朋友),但是它们相加而不是。因此,如果向元素添加相同的事件处理程序5次,则在事件触发时将运行5次。
答案 2 :(得分:0)