JQM:taphold事件不会阻止点击事件

时间:2014-08-18 13:45:03

标签: jquery-mobile javascript-events

我试图在JQM下的链接上绑定taphold事件。

问题出现的情况是,如果用户长按一下,就会在此链接上释放鼠标 - 也会触发click事件。什么当然不打算 - 我想分开这些事件。

所以我有这样的链接:

<a href="do-smth">link</a>

等等,应该在长时间点击

$("a").on("taphold", function(event) {do_smth_else()});
当用户进行长时间点击并将鼠标悬停在链接上时,

会同时执行do-smthdo_smth_else

这里以http://jsfiddle.net/GardenOfEmuna/68r4gph6/1/为例。

是否有人对此采取了补救措施?

1 个答案:

答案 0 :(得分:2)

据我所知,除了preventing the default behavior事件的vclick之外别无他法:

$(".link").on({
    taphold: function() {
        post('long tap fired');
    },
    vclick: function(e) {
        e.preventDefault();
    }
});

这样,将调用taphold处理程序,但与该链接关联的默认操作将被取消。

您会找到更新的小提琴here

如果您希望仍然发生链接的默认行为,但仅当未执行长时间点击时,您必须将状态与元素本身相关联。 jQuery的data()工具允许你写:

$(".link").on({
    taphold: function() {
        post('long tap fired');
        $(this).data("longTapRegistered", true);
    },
    "vclick vmouseout": function(e) {
        var $this = $(this);
        if (e.type == "vclick" && $this.data("longTapRegistered")) {
            e.preventDefault();
        }
        $this.removeData("longTapRegistered");
    }
});

请注意,我们还必须删除vmouseout上的持久状态,以避免您在评论中描述的问题。

你会找到一个演示这个here的小提琴。