2

我正在尝试通过以下方式将事件处理程序附加到动态创建的 DOM 元素:

var createdElement = $('<a>', {
    click: function (data) {
        alert("click");
    }
});

这按预期工作,但现在我想将一个变量传递给 click 函数。谁能建议如何做到这一点。

4

1 回答 1

2

代码悖论的答案在一般情况下有效,但总是将相同的值传递给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,请随意忽略这一点。)

于 2012-07-29T07:34:00.897 回答