[久经考验] 我检查了jQuery Mobile的的实现。他们每次在'vmouseup'后都会在'taphold'之后发射'tap'事件。
解决方法是如果'taphold'已被触发,则不触发'tap'事件。按您需要如下创建自定义事件或修改源:
$.event.special.tap = {
tapholdThreshold: 750,
setup: function() {
var thisObject = this,
$this = $(thisObject);
$this.bind("vmousedown", function(event) {
if (event.which && event.which !== 1) {
return false;
}
var origTarget = event.target,
origEvent = event.originalEvent,
/****************Modified Here**************************/
tapfired = false,
timer;
function clearTapTimer() {
clearTimeout(timer);
}
function clearTapHandlers() {
clearTapTimer();
$this.unbind("vclick", clickHandler)
.unbind("vmouseup", clearTapTimer);
$(document).unbind("vmousecancel", clearTapHandlers);
}
function clickHandler(event) {
clearTapHandlers();
// ONLY trigger a 'tap' event if the start target is
// the same as the stop target.
/****************Modified Here**************************/
//if (origTarget === event.target) {
if (origTarget === event.target && !tapfired) {
triggerCustomEvent(thisObject, "tap", event);
}
}
$this.bind("vmouseup", clearTapTimer)
.bind("vclick", clickHandler);
$(document).bind("vmousecancel", clearTapHandlers);
timer = setTimeout(function() {
tapfired = true;/****************Modified Here**************************/
triggerCustomEvent(thisObject, "taphold", $.Event("taphold", { target: origTarget }));
}, $.event.special.tap.tapholdThreshold);
});
}
};
我该如何使用它? – 2013-10-03 15:26:54
@JeremieWeldin上面提到了jquery.mobile.js文件本身的修改。 – 2014-02-03 17:39:39
我终于得到了。我本应该回到这样评论。谢谢! – 2014-02-03 21:13:51