JQuery Mobile - 为什么绑定事件后会被多次执行?
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文件路径就可以了!
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <!-- 远程JS 可以正常使用 -->
<!-- <link rel="stylesheet" href="http://apps.bdimg.com/libs/jquerymobile/1.4.5/jquery.mobile-1.4.5.min.css">
<script src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="http://apps.bdimg.com/libs/jquerymobile/1.4.5/jquery.mobile-1.4.5.min.js"></script> --> <!-- 本地JS-->
<link rel="stylesheet" href="../js/common/jquery.mobile-1.4.5.min.css">
<script src="../js/common/jquery-2.1.4.js"></script>
<script src="../js/common/jquery.mobile-1.4.5.min.js"></script>
<!--<script src="../cordova.js"></script>--> </head>
<body> <div data-role="Page"> <div data-role="header" data-position="fixed">
<a href="index.html" class="ui-btn ui-btn-left ui-corner-all ui-shadow ui-icon-back">返回</a>
<h1>设置密码</h1>
</div> <div data-role="content"> <form method="post" action="#">
<input type="text" name="password" id="password">
<!--<input type="submit" data-inline="true" value="提交">-->
<button id="changePassword" class="ui-btn ui-btn-corner-all ui-corner-all">
设置密码
</button>
</form>
</div>
</div> <script language="JavaScript"> $(document).bind("pageinit", function () { //对"tap"事件的绑定 // off和on绑定"tap"方法
$("#changePassword").off("tap").on("tap", function (e) { //加入此方法,阻止元素发生默认的行为
e.preventDefault(); alert('clicked on "tap" use "on"'); }); // // bind和unbind绑定"tap"方法
// $("#changePassword").unbind("tap").bind("tap", function (e) {
//
// alert('clicked on "tap" use "bind"');
//
// //加入此方法,阻止元素发生默认的行为
// e.preventDefault();
// }); //--------------------------------------------------------------------------
//对"click"事件的绑定 // // off和on绑定"click"方法
// $("#changePassword").off("click").on("click", function (e) {
//
// //加入此方法,阻止元素发生默认的行为
// e.preventDefault();
//
// alert('clicked on "click" use "on"');
//
//
// }); // // bind和unbind绑定"click"方法
// $("#changePassword").unbind("click").bind("click", function (e) {
//
// alert('clicked on "tap" use "bind"');
//
// //加入此方法,阻止元素发生默认的行为
// e.preventDefault();
// }); //--------------------------------------------------------------------------
//cordova代码 <!--添加cordova设备就绪事件-->
<!--document.addEventListener("deviceready", function () {--> <!--显示设备信息-->
<!--showDeviceInfo();-->
<!--}, false);--> <!--显示设备信息-->
<!--function showDeviceInfo() {-->
<!--alert(device.cordova);-->
<!--}--> }) </script> </body>
</html>
注意问题:如果自写的JS代码不在body里面,在真机执行没有效果,不执行!把自己写的JS代码加入到body里面就可以了,最好是写一个单独的JS文件,包含进来,那样页面看起来更规整!
参考:
https://blog.csdn.net/gundumw100/article/details/69993029
https://blog.csdn.net/aptentity/article/details/71268011
http://www.w3school.com.cn/jquery/event_preventdefault.asp
https://blog.csdn.net/tmacjackson/article/details/46830027
JQuery Mobile - 为什么绑定事件后会被多次执行?的更多相关文章
- Jquery on方法绑定事件后执行多次
每次绑定前先取消上次的绑定. $('#sub').unbind('click').click(function () { ... });
- 2017年3月25日工作日志:Jquery使用小结[绑定事件判断、select标签、军官证正则]
jQuery获取DOM绑定事件 在1.8.0版本之前,我们要想获取某个DOM绑定的事件处理程序可以这样: $.data(domObj,'events');//或者$('selector').data( ...
- 关于Jquery的delegate绑定事件无效
今天在做一个页面,用的是easyui页面有很多的tabs,里面都放了iframe 需要在load事件动态调整iframe高度 发现始终无法使用delegate来绑定load事件. 纠结了一下午发现了问 ...
- jquery-10 jquery中的绑定事件和解绑事件的方法是什么
jquery-10 jquery中的绑定事件和解绑事件的方法是什么 一.总结 一句话总结:bind(); unbind(); one(); 1. jquery中的绑定事件和解绑事件的方法是什么? bi ...
- jQuery添加html绑定事件
jQuery添加html绑定事件 $("#xxx").on("click",".dev",function(){ });
- jQuery的live绑定事件在mobile safari(iphone / ipad / ipod)上失效的解决方案
jQuery的live绑定为什么会在mobile safari上失效呢?其实可以追溯到jQuery里live的实现方式.live的实现方式实际上是通过事件委托机制来实现的,也就是说是通过诸如冒泡的方式 ...
- jquery 使用off移除事件 使用one绑定一次事件,on绑定事件后触发多次相同的事件的异常
<!-- jquery 移除事件,绑定一次事件,搜狗 one --> <!DOCTYPE html> <html lang="en"> < ...
- jQuery Mobile方向感应事件
在现在的智能手机中,都有对方向变换的自动感知功能,比如当手机方向从水平方向切换到垂直方向时,则会触发该事件.在jQuery Mobile中,可以通过orientationchange事件进行绑定,并且 ...
- jquery中on绑定事件
之前项目中动态创建的标签元素 在绑定事件的时候 都是无效 无论如何都不能触发 eg:在页面加载完成之后 再由脚本动态创建的<div>元素 在绑定事件的时候 例如click事件 ...
随机推荐
- Silverlight实用窍门系列:57.Silverlight中的Binding使用(二)-数据验证
本文将简单讲述Silverlight中的Binding数据时的数据验证. NotifyOnValidationError:是否在出现异常/错误信息的时候激发BindingValidationError ...
- Kendo UI 的弹框
弹出代码: "use strict"; (function (kendo) { kendo.messageShow = function (message, option) { v ...
- DB2频繁出现死锁,常用解决问题的命令
--DB2频繁出现死锁,常用解决问题的命令db2 get snapshot for locks on sampledb2 get db cfg for sampledb2 update db cfg ...
- 挪过来的spring mvc 的入门 介绍
目录 一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 ...
- Speeding up Homestead on Windows Using NFS
Speeding up Homestead on Windows Using NFS Sep 07 2015 Homestead Laravel EDIT: I have another articl ...
- vue run dev 8080端口被占用
用vue 官方脚手架vue-cli构建项目容易碰到一些小错误 vue init webpack project-name ...... cd project-name npm install npm ...
- Ubuntu 配置网卡信息
关于图形界面的配置,我这里就不多介绍了,这个很简单.这里介绍的是如何通过修改配置文件来实现虚拟网卡. 首先介绍ubuntu(我这里使用的是ubuntu-16.04)下虚拟网卡的配置 1.先用ifcon ...
- 设计模式之flyweight享元模式
运用共享技术支持大量细粒度对象的使用 Flyweight模式(享元) Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模 ...
- 2018.09.05 bzoj1010: [HNOI2008]玩具装箱toy(斜率优化dp)
传送门 一道经典的斜率优化dp. 推式子ing... 令f[i]表示装前i个玩具的最优代价. 然后用老套路. 我们只考虑把第j+1" role="presentation" ...
- simpson法计算arctan(1)-即pi/4
对1/(1+x^2) 进行0到1的积分即使pi/4; 采用simpson方法 Func<double,double> func=(x)=>{ return 1/(1+ Math.Po ...