如何停止多个事件处理程序onclick的html从服务响应

How to stop multiple event handler onclick on html from servise resnonse?

本文关键字:html 服务 响应 onclick 程序 何停止 事件处理      更新时间:2023-09-26

我有一个div block:

<div class='btn'>click here</div>
<div class='dialogWindow'></div>

和js with click handler:

$('.btn').live('click', function(){
    $.ajax({
        type: "POST",
        url: "services/service1.php"        
    }).done(function(result) {
        $('.dialogWindow').empty().append(result).dialog();
        // Handler for btn in HTML from service1
        $('.newBtn').live('click', function(){
            alert('click on new btn');
        });
    });
});

from service1:

<div class='newBtn'>click here</div>

当用户点击div。btn ajax从service1 HTML返回新的div.newBtn。在jQuery对话框中显示新的HTML。当用户关闭对话框窗口,并通过点击div再次打开它。btn之后点击div.newBtn =>点击div.newBtn上的事件运行两次。如何运行click-event上div.newBtn只有那些不依赖于多少次用户打开jQuery对话框窗口?????

我认为你的问题是每次你点击btn你附加一个新的事件处理程序到newBtn。

如果你在按钮上没有任何其他事件处理程序-你的代码可以在添加新的点击处理程序之前删除现有的点击处理程序(类似于这样)

$('.btn').live('click', function(){
    $.ajax({
        type: "POST",
        url: "services/service1.php"        
    }).done(function(result) {
        $('.dialogWindow').empty().append(result).dialog();
        // Handler for btn in HTML from service1
        $('.newBtn').die( "click" );
        $('.newBtn').live('click', function(){
            alert('click on new btn');
        });
    });
});

另外,我不确定你在开发哪个版本的jquery,但是。live已经被弃用很长时间了。如果可能的话,我会切换到on/off

在事件承诺之外附加处理程序可能更有效:

$('.dialogWindow').on('click','.newBtn', function(){
    alert('click on new btn');
});
$('.btn').on('click', function(){
    $.ajax({
        type: "POST",
        url: "services/service1.php"        
    }).done(function(result) {
        $('.dialogWindow').empty().append(result).dialog();
    });
});