我试图在JQM下的链接上绑定taphold事件。
问题出现的情况是,如果用户长按一下,就会在此链接上释放鼠标 - 也会触发click事件。什么当然不打算 - 我想分开这些事件。
所以我有这样的链接:
<a href="do-smth">link</a>
等等,应该在长时间点击
$("a").on("taphold", function(event) {do_smth_else()});
当用户进行长时间点击并将鼠标悬停在链接上时,会同时执行do-smth
和do_smth_else
。
这里以http://jsfiddle.net/GardenOfEmuna/68r4gph6/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的小提琴。