ajax 后 javascript 函数停止工作

标签 javascript jquery ajax

<分区>

我的代码如下:

<div id="action-buttons" class="container">
     <button type="button" name="MyButton" id="closeButton">close RMA</button>
</div>
<div>
<button type="button" id="refreshButtons">refresh Buttons</button>
</div>
<script type="text/javascript">
            $(document).ready(function () {

                $("#refreshButtons").on('click', function () {
                    $.ajax({
                        url: "/renderButtons.html",
                        error: function () {
                            alert('Error message');
                        },
                        success: function (HtmlResult) {
                            $("#action-buttons").html(HtmlResult);
                        },
                        complete: function() {
                            alert('Action buttons - loaded successfully');
                        }

                    });

                });


                $("#closeButton").on('click', function () {
                    alert('some text');
                });



            });
    </script>

当我点击 #closeButton 时,我看到了警报。这是正确的。

但是当我加载 div#action-buttons 内容(通过单击 #refreshButtons)时,我的警报没有显示。为什么?

为什么浏览器控制台没有消息?

“/renderButtons.html”只是 html 文件:

<button type="button" name="MyButton" id="closeButton">close RMA</button>

最佳答案

按钮停止触发事件处理程序,因为它们不再(不再)连接到事件处理程序。

你的

$("#action-buttons").html(HtmlResult);

完全破坏 #action-buttons 元素内的元素,并用新元素替换它们。这些新元素没有连接到您的事件处理程序,旧元素是。

您可以通过两种方式解决此问题:

  1. 再次联系他们

  2. 使用事件委托(delegate)

事件委托(delegate)可能是你想要的。您将事件挂接到不会更改的容器(例如 #action-buttons),但告诉 jQuery 不要调用您的处理程序,除非事件通过与您提供的选择器匹配的元素传递它:

$("#action-buttons").on('click', "#closeButton", function () {
    alert('some text');
});

更多内容在 on documentation .

实例:

$(document).ready(function() {

  var counter = 0;
  $("#refreshButtons").on('click', function() {
    // Simulating the ajax here
    setTimeout(function() {
        ++counter;
        $("#action-buttons").html(
          '<button type="button" name="MyButton" id="closeButton">close RMA #' + counter + '</button>'
        );
    }, 10);
  });


  $("#action-buttons").on('click', "#closeButton", function() {
    alert('some text');
  });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="action-buttons" class="container">
  <button type="button" name="MyButton" id="closeButton">close RMA</button>
</div>
<div>
  <button type="button" id="refreshButtons">refresh Buttons</button>
</div>

关于ajax 后 javascript 函数停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34480592/

相关文章:

javascript - 使用 jquery 更改相应类的所有直接元素

javascript - 将数字数组从 ajax 传递到 Controller

jquery - 如何禁用点击菜单项上的 JQuery 路径点?

javascript - 如何在 PHP 中获取从 AJAX POST 发送的数据?

asp.net - firefox 和 opera 不兼容的浏览器

javascript - 如何将 dojo.query 与按钮一起使用?

java - 在java中将时间戳转换为ISO860,

javascript - 为什么不是所有的字都出现

jquery - 对于通过ajax注入(inject)的html,重新运行 document.ready() jqueries,可以吗?

javascript - 显示使用 Spring、Spring Security、Hibernate、jQuery、Backbone、AJAX 的 web-app 的当前登录用户的名称