我试图通过以下方式将事件处理程序附加到动态创建的DOM元素:
var createdElement = $('<a>', {
click: function (data) {
alert("click");
}
});
这可以按预期工作,但现在我想将一个变量传递给click函数。任何人都可以建议如何做到这一点。
答案 0 :(得分:2)
Codeparadox的答案适用于一般情况,但总是将相同的值传递给click
处理程序,而不管触发它的<a>
元素。
如果您希望值依赖于单击的元素,可以在元素本身上调用on():
var createdElement = $("<a>").on("click", {
yourData: "something"
}, function(event) {
alert("Data is " + event.data.yourData);
}).appendTo("body");
但是,上面的代码使用的语法与您问题中的语法不同。如果您想继续在属性/事件映射中定义click
处理程序,可以使用data()一次性将值与元素关联起来:
var createdElement = $("<a>", {
click: function() {
alert("Data is " + $(this).data("yourData"));
}
}).data("yourData", "something").appendTo("body");
(请注意,我添加了对appendTo("body")
的调用,因此新元素成为DOM的一部分,并且click
事件有机会被触发。如果您需要,请随意忽略稍后在代码中将元素添加到DOM。)