【问题标题】:Binding More Than One Dynamically Added Elements绑定多个动态添加的元素
【发布时间】:2014-01-04 04:22:36
【问题描述】:

我正在使用 jQuery Mobile,我需要将一些点击事件绑定到动态添加的内容。似乎我这样做的方式是,我的代码只运行我在代码中附加一个点击事件的最后一个元素。例如,当我单击元素 A 时,此代码将提示“Hi”,但当我单击元素 B 时,它将提示“Bye”。

我确信这是一个简单的错误,但我一直在用头撞桌子试图弄明白。

$(document).off("tap").on("tap", "#A", function() {
    alert('Hi');
});

$(document).off("tap").on("tap", "#B", function () {
    alert('Bye');
}); 

【问题讨论】:

  • ID为A的元素是否存在?
  • 是的。如果我在代码中切换它们的顺序,A 会起作用,B 不会。
  • .off('tap', '#a, #b').on('tap', '#a, #b', function () 试试这个。
  • 为什么要解绑事件?
  • @Omar 我喜欢这种方法。我仍然可以以某种方式使用 $(this) 访问元素吗?我正在尝试找到一种更标准化的方法。

标签: javascript jquery jquery-mobile


【解决方案1】:

这是因为您将事件附加到文档,然后在下一行解除绑定。因此,当您在文档上关闭 tap 并再次在文档上为 b 绑定时,您在 A 上的绑定就会丢失。

试试:

$(document).off("tap");
$(document).on("tap", "#A", function() {
    alert('Hi');
});

$(document).on("tap", "#B", function () {
    alert('Bye');
}); 

您也可以将其链接起来,以避免一次又一次地创建 jquery 对象。

$(document).off("tap")
  .on("tap", "#A", function() {
    alert('Hi');
}).on("tap", "#B", function () {
    alert('Bye');
}); 

【讨论】:

  • 这似乎成功了。我还不能完全接受答案,但我会在大约 5 分钟后到这里。非常感谢。
  • @BenjaminAnderson A 和 B 最终都调用了同一个函数吗?
  • 没有。他们正在调用不同的函数,并且还使用 $(this) 选择器来访问来自 A 或 B 的信息。
猜你喜欢
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 2014-09-17
相关资源
最近更新 更多