JQuery Mobile 在绑定事件时候,发现会被多次执行,为什么啊?

原来,jquery click  不是替换原有的function ,而是接着添加,所以才会执行次数越来越多,怎么办才能按需实现功能?在执行正常点击事件之前,解绑事件!!

JQuery对事件的绑定主要有两种方式,分别是on和bind,这两种方式分别对应的解绑方式为off和unbind,知道这些,我们就可以写代码了:

一,用on和off



// off和on绑定"tap"方法
$("#changePassword").off("tap").on("tap", function (e) {

alert('clicked on "tap" use "on"');

//加入此方法,阻止元素发生默认的行为
e.preventDefault();
});


二,用bind和unbind



// bind和unbind绑定"tap"方法
$("#changePassword").unbind("tap").bind("tap", function (e) {

alert('clicked on "tap" use "bind"');

//加入此方法,阻止元素发生默认的行为
e.preventDefault();
});


说明:JQuery可以把多个操作形成一个链,一起执行,上面语句的unbind和bind,就是被写成链式调用了!

下面是我解决这个问题时候的页面全部源码,如果你想直接运行,修改一下相应css和JS文件路径就可以了!



1 <!doctype html>
2 <html>
3 <head>
4 <meta charset="utf-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1">
6
7 <!-- 远程JS 可以正常使用 -->
8 <!-- <link rel="stylesheet" href="http://apps.bdimg.com/libs/jquerymobile/1.4.5/jquery.mobile-1.4.5.min.css">
9 <script src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script>
10 <script src="http://apps.bdimg.com/libs/jquerymobile/1.4.5/jquery.mobile-1.4.5.min.js"></script> -->
11
12 <!-- 本地JS-->
13 <link rel="stylesheet" href="../js/common/jquery.mobile-1.4.5.min.css">
14 <script src="../js/common/jquery-2.1.4.js"></script>
15 <script src="../js/common/jquery.mobile-1.4.5.min.js"></script>
16 <!--<script src="../cordova.js"></script>-->
17
18 </head>
19 <body>
20
21 <div data-role="Page">
22
23 <div data-role="header" data-position="fixed">
24 <a href="index.html" class="ui-btn ui-btn-left ui-corner-all ui-shadow ui-icon-back">返回</a>
25 <h1>设置密码</h1>
26 </div>
27
28 <div data-role="content">
29
30 <form method="post" action="#">
31 <input type="text" name="password" id="password">
32 <!--<input type="submit" data-inline="true" value="提交">-->
33 <button id="changePassword" class="ui-btn ui-btn-corner-all ui-corner-all">
34 设置密码
35 </button>
36 </form>
37 </div>
38 </div>
39
40 <script language="JavaScript">
41
42 $(document).bind("pageinit", function () {
43
44 //对"tap"事件的绑定
45
46 // off和on绑定"tap"方法
47 $("#changePassword").off("tap").on("tap", function (e) {
48
49 //加入此方法,阻止元素发生默认的行为
50 e.preventDefault();
51
52 alert('clicked on "tap" use "on"');
53
54 });
55
56
57 // // bind和unbind绑定"tap"方法
58 // $("#changePassword").unbind("tap").bind("tap", function (e) {
59 //
60 // alert('clicked on "tap" use "bind"');
61 //
62 // //加入此方法,阻止元素发生默认的行为
63 // e.preventDefault();
64 // });
65
66 //--------------------------------------------------------------------------
67 //对"click"事件的绑定
68
69 // // off和on绑定"click"方法
70 // $("#changePassword").off("click").on("click", function (e) {
71 //
72 // //加入此方法,阻止元素发生默认的行为
73 // e.preventDefault();
74 //
75 // alert('clicked on "click" use "on"');
76 //
77 //
78 // });
79
80 // // bind和unbind绑定"click"方法
81 // $("#changePassword").unbind("click").bind("click", function (e) {
82 //
83 // alert('clicked on "tap" use "bind"');
84 //
85 // //加入此方法,阻止元素发生默认的行为
86 // e.preventDefault();
87 // });
88
89
90 //--------------------------------------------------------------------------
91 //cordova代码
92
93 <!--添加cordova设备就绪事件-->
94 <!--document.addEventListener("deviceready", function () {-->
95
96 <!--显示设备信息-->
97 <!--showDeviceInfo();-->
98 <!--}, false);-->
99
100 <!--显示设备信息-->
101 <!--function showDeviceInfo() {-->
102 <!--alert(device.cordova);-->
103 <!--}-->
104
105 })
106
107 </script>
108
109 </body>
110 </html>


注意问题:如果自写的JS代码不在body里面,在真机执行没有效果,不执行!把自己写的JS代码加入到body里面就可以了,最好是写一个单独的JS文件,包含进来,那样页面看起来更规整!