1

我有一个动态创建<span class="remove-row">的,我无法click()触发该事件。在 JS 中仍然相对绿色,我我的问题出在我的选择器上。

这一切都可以在 jsFiddle 上看到
(请参阅 JS 窗格的最底部)

这是生成的html 的精简版本:

...
<section >
    <div class="look-like-input textfield droppable" restrict-children="1" id="">
        <span class="remove-row"><span>X</span></span>
    </div>
    <br />
    <div class="look-like-input textarea droppable" id="deprecated"></div>
</section>
...

这就是我试图获取点击事件的方式:

...
$(".remove-row").click(function() {
    alert("Hello");
});
4

5 回答 5

3

Because .click gets bound when the page is ready, use .on to allow for the bind to happen as the items get added to the dom. While .live would work, it has been deprecated.

$("#drop-zone").on('click', '.remove-row', function() {
    alert("Hello");
});

Drop zone id is added for efficiency and scope limiting.

http://jsfiddle.net/48nbs/22/

于 2013-01-15T19:42:05.823 回答
1

考虑使用:

jQuery(".remove-row").on("click", function () {alert('hello');});
于 2013-01-15T19:37:57.783 回答
1

尝试像这样使用 on() :

$(".remove-row").on('click',function() {
    alert("Hello");
});

这将处理动态创建的元素。

你也可以使用 live() 但从 live()jQuery 1.7 开始不推荐使用——http: //api.jquery.com/live/

于 2013-01-15T19:39:18.427 回答
1

我有一个类似的问题。这对我有用:

$(".remove-row").on("点击", function () { alert('hello'); } );

或者 Amd4632 设计的 .live 版本也应该可以工作。

于 2013-01-15T19:39:46.510 回答
0

在设置侦听器的代码已经执行之后,您可能正在生成 html。在这种情况下,监听器将永远不会附加到动态生成的 span 元素上。

编辑
事实上,我刚刚检查了你的小提琴,我没有看到在任何地方设置监听器的脚本代码。我假设您在页面加载后执行代码。在这种情况下,如果尚未生成 DOM 元素,则不会附加侦听器。

于 2013-01-15T19:37:43.920 回答