HTML 重绘上的 jquery 事件处理程序

标签 jquery

假设我有以下 HTML 和 js

<div>
  <div class="testdiv" id="test1">test</div>
  <div class="testdiv" id="test2">test</div>
</div>

function DynamicEvents() {

  $('.testdiv').click (function () {
     DoSomething();
  });
}

function RedrawHTML() {

  $('#test1').html('new HTML');
  DynamicEvents();
}

每次调用 RedrawHTML 时,我也会调用 DynamicEvents 来重新绑定(bind) test1。假设我多次调用 RedrawHTML 来更新 div。我的问题是:当我单击 test2 时,函数 DoSomething() 是否执行一次,还是执行与我调用 RedrawHTML() 一样多的次数?

最佳答案

为了正确使用 .on,您需要将事件绑定(bind)到 DOM 中当前存在的父元素。所以如果我是你,我会给父 div 一个 id 并将事件绑定(bind)到它。这是一个例子

对于你的html

<div id="container">
  <div class="testdiv" id="test1">test</div>
  <div class="testdiv" id="test2">test</div>
</div>

在JS中

$('#container').on('click', '.testdiv', DoSomething); 

如果在事件绑定(bind)时没有父元素保证位于 DOM 中,那么在最坏的情况下您可以绑定(bind)到 bodydocument 但我不推荐这种方法。

$("body").on('click', '.testdiv', DoSomething); 

$(document).on('click', '.testdiv', DoSomething); 

如果您不使用 jQuery 1.7,则等效的委托(delegate)代码为

 $('#container').delegate('click', '.testdiv', DoSomething); 

只需执行一次,.testdiv 触发的所有点击事件都会冒泡到 #containerDoSomething()将被执行。

关于HTML 重绘上的 jquery 事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8100439/

相关文章:

javascript - 从下拉列表中获取过滤后的数据并显示在另一个下拉列表中

javascript - 用于 HTML 表单的 XY slider Controller 网格 用于网络和移动网络的 jQuery/Javascript

javascript - HTML javascript 动态调整表格大小

jquery - slider 和溢出问题

javascript - Z-Index 不适用于下拉列表中的 UL LI

javascript - 带有 https url 的 jquery 和 post 方法安全性

javascript - 如何删除表中的td

jquery - 更改JQuery下拉列表的背景颜色

jquery - 克隆表行并添加 td

jquery - 根据各自点击的元素突出显示 div