需要 .click 的事件侦听器,以便动态刷新按钮工作,但操作成倍增加

Need eventlistener for .click so that dynamically refreshed buttons work, but actions multiply

我有一个页面,其中一个 div:s 内容(不是整个页面)refresh/reload/update 如果我对数据库进行更改。

此内容包含一个 table,其行包含一些文本和按钮。因为我需要按钮仍然与 .click 一起工作,所以我添加了一个 eventListeners。问题是我第一次按下这个 div 中的一个按钮时它应该是这样,但是每次我按下这些按钮中的一个时,动作都会成倍增加。

好像eventListener太多了。但我需要创建它们,以便每个按钮都可以点击。你会如何解决这个问题?

我的大脑告诉我,我需要删除其他 eventListener(因为每次单击都会创建一个,对吗?),然后触发一个新的。但是我不知道该怎么做。

我的代码类似于下面的代码。所以我第一次按 'Edit' 我得到一个 'Hello'-alert,第二次我得到两个 'Hello'-alerts,第三次我得到三个 'Hello'-alerts。 .....等

HTML

<div class="div-to-reload">
    <?php
        // Loop Through Database {
            echo '<td><p>Some Info</p></td>';
            echo '<td><button class="edit-button">Edit</button></td>';
        }
    ?>
</div>

JS

$(document).ready(function(){

    var setupEventListener {
        $('.edit-button').click(function(e){
            e.preventDefault();
            someFunction();
        });
    }

    function someFunction(){
        // update database with ajax and on success:
        alert('hello');
        $('.div-to-reload').load(document.URL + ' .div-to-reload', setupEventListeners);
    }

    setupEventListener();

});

您可以尝试更换您的

var setupEventListener {
    $('.edit-button').click(function(){
        e.preventDefault();
        someFunction();
    });
}

像这样

$(".div-to-reload").on('click', '.edit-button', function(e){
        e.preventDefault();
        someFunction();
    });
 );

这样您将拥有一个用于所有按钮的处理程序。 这没有经过测试,但应该可以工作。