我遇到一个简单的JQuery移动应用程序的问题。这一切都归结为点击事件两次触发。
没有类似问题的解决方案解决了这个问题。
无论是部署到设备还是在浏览器中显示,都会出现问题。
这是代码
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, user-scalable=no" />
<script src="jquery-1.8.2.min.js" type="text/javascript"></script>
<script src="jquery.mobile-1.2.0.min.js" type="text/javascript"></script>
<script src="cordova-2.2.0.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).bind("mobileinit", function () {
$.support.cors = true;
$.mobile.allowCrossDomainPages = true;
});
</script>
<link rel="Stylesheet" href="jquery.mobile-1.2.0.min.css" />
<div>
<input type="button" id="ButtonSubmit" value="Save" />
</div>
<script type="text/javascript">
$("#ButtonSubmit").click(function () {
alert('Clicked');
});
</script>
答案 0 :(得分:4)
你可以通过下面提到的方式解决这个问题。
首先使用取消绑定,然后绑定,如下所示:
<script type="text/javascript">
$("#ButtonSubmit").unbind('click').bind('click', function () {
alert('Clicked');
return false; //to prevent the browser actually following the links!
});
</script>
更新:如果您使用 on 方法,则可以使用如下所示。
注意:当您使用关闭方法时,它会删除之前的点击事件处理程序,并使用 on 方法添加新的one.B'cos,它不允许发生点击2次。
<script type="text/javascript">
$('#ButtonSubmit').off('click').on('click', function(){
alert('Clicked');
return false; //to prevent the browser actually following the links!
});
</script>
答案 1 :(得分:2)
最新的jQuery手机中有大量实验性内容正在触发点击事件,这可能会导致这些问题(第2689行):
// This plugin is an experiment for abstracting away the touch and mouse
// events so that developers don't have to worry about which method of input
// the device their document is loaded on supports.
//
// The idea here is to allow the developer to register listeners for the
// basic mouse events, such as mousedown, mousemove, mouseup, and click,
// and the plugin will take care of registering the correct listeners
// behind the scenes to invoke the listener at the fastest possible time
// for that device, while still retaining the order of event firing in
// the traditional mouse environment, should multiple handlers be registered
// on the same element for different events.
//
// The current version exposes the following virtual events to jQuery bind methods:
// "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel"
http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.js
我修复它的方式是:
$('#mobileMenuItem').off('click');
然后它开始正常运作。
答案 2 :(得分:1)
我认为这与您处理事件的方式有关。即使用pageinit。
也可能隐藏具有不同数据网址的页面,因此无论如何,相同的js也会运行。
在您的代码中,我会进行以下更改
<script type="text/javascript">
$(document).off('click').on('click', '#ButtonSubmit', function () {
alert('Clicked');
});
</script>
以这种方式,我知道我会绑定一次。
答案 3 :(得分:0)
您是否尝试阻止默认操作?
<script type="text/javascript">
$("#ButtonSubmit").click(function (e) {
e.preventDefault();
alert('Clicked');
});
</script>
答案 4 :(得分:0)
如果您的onclick处理程序触发两次,那么您的处理程序可能会被注册两次。您可以在注册处理程序之前添加一些日志记录,以验证这是发生了什么。然后你可以调试它被注册两次的原因。