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

Posted

技术标签:

【中文标题】JQuery Mobile swiperight 事件触发先前触发的列表视图元素【英文标题】:JQuery Mobile swiperight event fires previously fired listview elements 【发布时间】:2015-06-23 07:56:18 【问题描述】:

我正在尝试使用 '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%");
    );

非常感谢各位。

【问题讨论】:

【参考方案1】:

问题是您每次都向 yes 和 cancel 按钮添加新的点击处理程序,因此要么添加一个 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%");
    );

);

【讨论】:

以上是关于JQuery Mobile swiperight 事件触发先前触发的列表视图元素的主要内容,如果未能解决你的问题,请参考以下文章

无法阻止被动事件监听器jQuery Mobile中的默认

Jquery Mobile Swipe 事件导致输入中的文本不可拖动

在jquery mobile中打开面板时如何防止页面被拖动?

iOS7 中 jQuery Mobile 滑动事件的不稳定行为

jQuery Mobile中jQuery.mobile.changePage方法使用详解

jQuery Mobile仿360首页,jQuery Mobile网格布局,jQuery Mobile网址大全,HTML5仿360首页