2

我动态生成

<input type="text" id="foo">
<label for="foo">

并将侦听器设置为输入

updateWithLabelInputs($("#foo"));

和功能:

function updateWithLabelInputs(withLabel) {
    withLabel.die("focus").live("focus", function (e) {
        $(this).parent().find('label').hide();
    });
    withLabel.die("blur").live("blur", function (e) {
        if ($(this).val() == '') {
            $(this).parent().find('label').show();
        }
    });    
}

当我按标签单击时,我希望该事件被触发,但事实并非如此。有趣的是:如果相同的侦听器适用于现有的(非动态的)html - 它可以工作。问题是什么?为什么监听器不适用于动态元素?

4

1 回答 1

0

我很想看到您在其中创建元素并将事件附加到它的所有代码。我认为您没有按正确的顺序执行此操作:

事件处理程序仅绑定到当前选定的元素;当您的代码调用 .on() 时,它们必须存在于页面上。为确保元素存在并且可以被选择,请在页面 HTML 标记中的元素的文档就绪处理程序内执行事件绑定。如果将新 HTML 注入页面,请在将新 HTML 放入页面后选择元素并附加事件处理程序。或者,使用委托事件来附加事件处理程序,如下所述。

早期版本:你需要https://github.com/brandonaaron/livequery来做这样的事情。或者,如果您愿意使用更高版本的 jQuery,没有dieand live,请使用.on.off

于 2013-06-03T14:29:31.220 回答