Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery事件优先级_Javascript_Jquery - Fatal编程技术网

Javascript jQuery事件优先级

Javascript jQuery事件优先级,javascript,jquery,Javascript,Jquery,我有一个绑定了多个事件处理程序的元素: <div id="info"> <button class="action-delete" type="button">Delete</button> </div> $("#info").on("click", ".action-delete", function() { $.event.trigger({ type: "application", mess

我有一个绑定了多个事件处理程序的元素:

<div id="info">
    <button class="action-delete" type="button">Delete</button>
</div>


$("#info").on("click", ".action-delete", function() {
    $.event.trigger({
        type: "application",
        message: {
            name: "item-delete",
            item: $("#info").data("item")
        }
    });
});
但是,我发现在显示确认窗口时,
delete
操作仍然在用户选择之前完成


有什么办法可以解决吗?

问题在于您的确认电话:

$(document).on("click", ".action-delete", function(e) {
    return confirm("Sure to delete?");
})
应该是这样的:

$(document).on("click", ".action-delete", function(e) {
    e.preventDefault(); //prevent default behavior
    var conf = confirm("Sure to delete?");
    if(conf == true){
      $("#info").trigger( "click" ); //trigger click event for delete
    }
});

另外,我建议从父div中删除click事件。改为创建一个delete函数,并让确认对话框(“yes”)触发该函数。

我认为事件处理程序是运行FIFO的,因此您需要在添加另一个事件处理程序之前添加第一个事件处理程序(这意味着在浏览器看到另一个事件处理程序之前包含它)。但是,我打赌有一种更干净的方法可以做到这一点,比如使用
数据确认class='Sure to delete?'
并检测和显示/阻止是否设置了该属性。这样你就不会做这样愚蠢的事情了。事实上,我曾尝试在
#info
之前将事件添加到
文档中,但似乎不起作用。
$(document).on("click", ".action-delete", function(e) {
    e.preventDefault(); //prevent default behavior
    var conf = confirm("Sure to delete?");
    if(conf == true){
      $("#info").trigger( "click" ); //trigger click event for delete
    }
});