javascript函数在ajax之后停止工作

javascript函数在ajax之后停止工作,javascript,jquery,ajax,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&g

我的代码如下:

<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>

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

你的

完全销毁
#操作按钮
元素中的元素,并用新元素替换它们。这些新元素没有连接到事件处理程序,而旧元素是

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

  • 再把他们联系起来

  • 使用事件委派

  • 事件委派可能是您想要的。将事件挂接到一个不会更改的容器上(例如,
    #操作按钮
    ),但告诉jQuery不要调用处理程序,除非事件通过一个与您指定的选择器匹配的元素:

    $("#action-buttons").on('click', "#closeButton", function () {
        alert('some text');
    });
    
    更多信息请访问

    现场示例:

    $(文档).ready(函数(){
    var计数器=0;
    $(“#刷新按钮”)。在('单击',函数()上{
    //在这里模拟ajax
    setTimeout(函数(){
    ++计数器;
    $(“#操作按钮”).html(
    “关闭RMA”+“计数器+”
    );
    }, 10);
    });
    $(“#操作按钮”)。在('单击',“#关闭按钮”,函数()上{
    警报(“某些文本”);
    });
    });
    
    
    关闭军事革命
    刷新按钮
    
    Ajax响应后的
    ;您现有的按钮将被删除,更新的按钮将被插入DOM中。因此,您绑定到旧按钮的任何
    事件都会自动从上下文中删除。因此,在处理这种情况时,您需要在附加事件时使用jquery的事件委派技术,如下所示:

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

    在上述情况下;事件首先通过
    document
    附加并侦听,然后将其委托给id为“#closeButton”的按钮(如果DOM中存在)。我希望我已经澄清了你的疑问。

    点击“关闭按钮”而不是“刷新按钮”时,你的警报就会响起。如果按钮又是相同的标记,为什么要替换按钮?@Andreas:这只是我问题的一个例子,真正的代码太大,无法粘贴到这里。
    $("#action-buttons").html(HtmlResult);
    
    $("#action-buttons").on('click', "#closeButton", function () {
        alert('some text');
    });
    
    $(document).on('click',"#closeButton", function () {
        alert('some text');
    });