JQuery Mobile swiperight 事件触发之前触发的列表视图元素

JQuery Mobile swiperight event fires previously fired listview elements

我正在尝试使用 'swiperight' 事件来删除列表视图项,但该事件似乎也会针对之前触发的元素触发。我已经为此苦苦挣扎了一段时间,试图调试并弄清楚它是范围问题还是冒泡问题,但我真的不知道。

here is a gif to illustrate the problem

代码如下:

var $task;

$("#todolist").on("swiperight", ">li", function() {
    $task = $(this);
    $task.animate({left: "30%"}, confirmAndDelete($task));
});

function confirmAndDelete($task) {
    $("#confirm").popup("open");
    $("#confirm #yes").on("tap", function() {
        $task.animate({left: "70%"}, function() {
            $task.remove();
        });
    });
    $("#confirm #cancel").on("tap", function() {
        $task.animate({left: "-=30%"});
    });
}

非常感谢大家。

问题是您每次都在向“是”和“取消”按钮添加新的点击处理程序,因此要么添加一个 off() 来删除以前的处理程序,要么只在 confirmAndDelete 之外创建一次:

var $task;

$(document).on("pagecreate","#page1", function(){ 

    $("#todolist").on("swiperight", ">li", function() {
        $task = $(this);
        $task.animate({left: "30%"}, function(){
            $("#confirm").popup("open");
        });
    });

    $("#confirm #yes").on("tap", function() {
        $task.animate({left: "70%"}, function() {
            $task.remove();
        });
    });
    $("#confirm #cancel").on("tap", function(e) {
        $task.animate({left: "-=30%"});
    });

});