我正在使用Jquery Mobile在桌面,iPad和Android手机上构建一个Web应用程序。我希望用户能够点击一个按钮来增加(或减少)一个值。我的代码可以在桌面上正常工作,但在iPad和Android上,当用户快速点击时,屏幕将缩放而不是增加值。 我一直试图在这里实现的解决方案:Safari iPad : prevent zoom on double-tap(特别是由克里斯托弗·托马斯提供的细化如何防止iOS和Android中的双重缩放
这里是我的按钮和值码:
<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);
此功能正确捕捉双击。但是,最后的触发器功能不起作用(事件未被触发)。如果我用$('#but').trigger('click');
替代$(this).trigger('click');
,那么一切正常。我希望这适用于多个不同的按钮,所以我需要能够根据调用touchstart事件的对象来触发事件。任何人都可以帮我解决这个问题。
我增加这里的jsfiddle:[链接] HTTP:// jsfiddle.net/GZEM7/11/版本11工作正常(它使用'$('#'但')')版本10不起作用(它使用'$(this)')。 – engeeaitch 2013-04-07 13:01:37
你在这里没有解释你是如何将jquery函数应用到你的元素的,例如,看我的代码,我说“$(”body).nodoubletapzoom();“这是因为我想将函数应用到整个文档,这可以解释为什么你会得到整个文档,而不是选定的元素? – 2013-04-08 10:37:40
也,我有一个“内容”节点内的身体,我想确保所有的事件不起泡到正文元素,所以我使用jquery.on()将jquery点击处理程序等附加到内容节点,然后我将双抽头处理程序附加到主体,这意味着任何转义“内容”节点并到达主体的事件,我想忽略,但我用“内容”像<>来捕捉事件,你明白吗? –
2013-04-08 10:39:47