jquery移动点击事件触发两次

时间:2012-12-01 14:25:55

标签: jquery cordova jquery-mobile mobile

我遇到一个简单的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>

5 个答案:

答案 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处理程序触发两次,那么您的处理程序可能会被注册两次。您可以在注册处理程序之前添加一些日志记录,以验证这是发生了什么。然后你可以调试它被注册两次的原因。