我正在使用Jquery Mobile构建一个Web应用程序,用于桌面,iPad和Android手机。我希望用户能够点击一个按钮来增加(或减少)一个值。我的代码在桌面上工作正常,但在iPad和Android上,当用户快速点击时,屏幕会缩放而不是增加值。 我一直在尝试在这里实现解决方案:Safari iPad : prevent zoom on double-tap(特别是Christopher Thomas提供的改进。
这是我的按钮和值的代码:
<div class="content">
<div id ="status_page" data-role="page">
<div data-role="content" data-theme="d">
<div id="val">1</div>
<div id="but" data-role="button">Click</div>
</div>
</div>
</div>
这是我点击按钮的事件处理程序(顺便说一句 - 我认为克里斯托弗答案中的参数是错误的方式):
$(".content") .on("click",$("#but"),function(){
var but_val = parseInt($("#val").text());
$("#val").text(but_val+1);
});
...这里是nodoubletap函数:
(function($) {
$.fn.nodoubletapzoom = function() {
if($("html.touch").length == 0) return;
$(this).bind('touchstart', function preventZoom(e){
var t2 = e.timeStamp;
var t1 = $(this).data('lastTouch') || t2;
var dt = t2 - t1;
var fingers = e.originalEvent.touches.length;
$(this).data('lastTouch', t2);
if (!dt || dt > 500 || fingers > 1){
return; // not double-tap
}
e.preventDefault(); // double tap - prevent the zoom
// also synthesize click events we just swallowed up
$(this).trigger('click');
});
};
})(jQuery);
此功能正确捕捉双击。但是,最后的触发器功能不起作用(事件未被触发)。如果我用$(this).trigger('click');
替换$('#but').trigger('click');
,那么一切正常。我希望这适用于许多不同的按钮,所以我需要能够根据调用touchstart事件的对象触发事件。任何人都可以帮我解决这个问题。
答案 0 :(得分:3)
解决方案是替换
$(this).trigger("click"):
与
$(e.target).trigger("click");
当然,我删除了你的IOS测试,因为它可以在chrome和android设备上运行:D
那是最终的解决方案吗?凉!我将用新版本更新我的代码,我认为它会更好
最终代码是:
$.fn.nodoubletapzoom = function() {
$(this).bind('touchstart', function preventZoom(e){
var t2 = e.timeStamp;
var t1 = $(this).data('lastTouch') || t2;
var dt = t2 - t1;
var fingers = e.originalEvent.touches.length;
$(this).data('lastTouch', t2);
if (!dt || dt > 500 || fingers > 1){
return; // not double-tap
}
e.preventDefault(); // double tap - prevent the zoom
// also synthesize click events we just swallowed up
$(e.target).trigger('click');
});
};
})(jQuery);
$(document).on('pageinit',"#status_page", function(){
$("body").nodoubletapzoom();
$(".content").on("click", "#but", function() {
var curr_val = parseInt($("#val").text());
$("#val").text(curr_val + 1);
});
});