【问题标题】:Binding event handler to the click event using jQuery on() wouldn't work on future elements使用 jQuery on() 将事件处理程序绑定到 click 事件将不适用于未来的元素
【发布时间】:2014-02-10 14:51:41
【问题描述】:

我正在尝试为未来元素的单击事件附加事件处理程序。 这是代码:

jQuery("#container").on("click", ".betslip_row .delete a", function(){
console.log(jQuery(this).data("outcomeId"));
});

每次将新投注添加到投注单时,都会刷新(重新加载)。这就是我选择“#container”的原因。

这是链接:

http://bit.ly/1coBBIa

  1. 在控制台上运行代码
  2. 在投注单中添加一些投注
  3. 点击 (x) 符号一一删除

它应该在控制台上打印每个已删除赌注的“结果 ID”。但事实并非如此。这段代码有错误吗?

提前感谢您的帮助。

编辑:

如果您在控制台上运行下面的代码,您可以在单击文档的任何位置看到目标元素及其内容,除了 (x) 下注删除选项。

jQuery(document).on('click', function(e){ console.log(e.target); }); 

(x) 单注删除有什么问题?为什么它不会触发事件或为什么我无法捕获事件?

【问题讨论】:

  • 做什么?是在检索对象的 outcomeId 数据属性时出现问题(它正在将 undefined 写入控制台)还是代码根本没有执行?
  • 请在问题本身中发布所有相关代码。在这一点上我最好的猜测是你在.betslip_row上设置data,但你的处理程序中的thisa

标签: javascript jquery events


【解决方案1】:

为了满足动态元素的点击,您可以执行以下操作:

        $(document).on('click', 'div.future-element-class-name', function () {
            // print object to console
            console.log($(this));
        });

【讨论】:

  • 这行不通。 'div.future-element-class-name' 要么不会触发事件,要么无法捕获触发的事件。如果您在控制台上运行下面的代码,您可以在单击文档的任何位置看到目标元素及其内容,除了 (x) 下注删除选项。 jQuery(document).on('click', function(e){ console.log(e.target); });
  • 如果您将 'div.future-element-class-name' 替换为 x 的类,那么它会起作用。我在我的生产环境中使用此代码,它适用于任何不属于 DOM 的元素。即:例如从局部视图动态添加代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
相关资源
最近更新 更多