0

在过去的 2-3 个小时里,我一直在尝试解决这个问题,但最终放弃了。这是我的 javascript/jquery 的一部分。

$(function() {  
    $('#ob').change(function() {
       var id = $("#ob").val();  
       var form_data = {
           id: id,
           OB: 3 
       };

       $.ajax({
           url: "changeinfo.php",
           type: 'POST',
           data: form_data,
           success: function(data) {
               $("#finfoob3").html(data);                             
           }
       });

       return false; 
   });
});  

以上成功地修改了一个 DIV 元素的变化。

但是在那个 DIV 元素中,有一个 id=obt3 的按钮不起作用。实际上,它正在将其名称覆盖为其他内容。我向 AJAX 调用发送了另一个 POST 值 OB,并将其与 obt 连接,使其变为 obt3。然后我将按钮的 id 放入 obt3 但它仍然不会响应点击事件。

我试图用谷歌浏览器检查元素,元素的 id 成功更改为 obt3,但不会响应它的点击事件。

4

3 回答 3

0

问题是,当您替换内容时,#finfoob3您破坏了所有居住在那里的节点,以及它们的所有事件处理程序。有两种方法可以处理这个问题:

  • 替换 div 内容后,重新创建您需要的任何事件处理程序。
  • 使用事件委托将事件处理程序附加到#finfoob3,因此当您更改其内容时它们不会被破坏。

由于您使用的是 jQuery,因此您应该查看.on()函数。它为您提供了一种定义事件委托的简单方法。

于 2012-11-01T18:07:20.350 回答
0

这可能会有所帮助。

$(document).on("click", "#obt3", function() {
       //do whatever
   });

在这里,我们将文档与所有动态创建的#obt3 元素绑定在一起。

于 2012-11-01T18:11:50.117 回答
0

如果我理解正确你的问题。您有一个带有 id 的 divfinfoob3并且在这个 div 中您有一个带有 id 的obt3按钮,并且您在此按钮上有一个事件单击处理程序,并且您有另一个带有 id 的元素ob,它更改触发器调用 ajax 并返回一些带有按钮的 html 代码obt3,它与您之前的按钮相同,但现在它不响应点击事件

这个 obt3 事件处理程序是这样的

$('#obt3').click(function(){ 
    //Some code which you want to perform
});

但它不起作用,所以将其更改为

$('#finfoob3').on('click', '#obt3' ,function(){ 
    //Some code which you want to perform
});

它会按您的意愿工作,但请确保您使用的是 jquery 1.6 或更高版本。

于 2012-11-01T18:15:50.143 回答