JQuery Mobile 开发学习手记(二):JS绑定的按钮动作不正确的问题
来源:互联网 发布:三星手机系统升级软件 编辑:程序博客网 时间:2024/05/01 17:49
二、bind和unbind。
在项目过程中,需要一组图片设置长按监听(原谅我在这用了“设置监听”一词),长按弹出一个对话框,点击确认删掉当前图片,然后刷新页面。
在最开始的时候,我是这样写的:
for(i = 0; i < bookNum; i++){(function(){var index = i;var bookHref = $('a#book_'+index);bookHref.bind("taphold", {index: index}, tapholdHandler);})();}function tapholdHandler(event) {$("#dialogDelete").popup("open");var dialogCommit = $('#dialogCommit');dialogCommit.click(function(){//删除书,然后刷新页面。});$('#dialogCancel').click(function(){$("#dialogDelete").popup("close");});}
然后发现,第一次长按删除的时候是正常的,第二次开始就乱七八糟的,多删了很多东西。
通过各种输出log调试,发现删除第一张图片的时候正常,删除第二张图片的时候会连续删两张,删除第三张图片的时候会连续删三张……
这就让我有点怀疑,是不是每次刷新页面的时候注册监听的问题?
百度了一下,果然如此,跟Java不同,JavaScript给界面元素绑定事件并不会替换原来绑定过的事件,而是会重复绑定。
还是上一节说的问题,Java的机制是“设置监听”,JavaScript的机制是“绑定事件”。
明白这一点后就好解决了。因为我删掉一张图片以后会刷新一下页面,即会重复绑定一次。
解决办法就是在每次绑定之前,先用unbind解绑一次。
for(i = 0; i < bookNum; i++){(function(){var index = i;var bookHref = $('a#book_'+index);bookHref.unbind("taphold",tapholdHandler);bookHref.bind("taphold", {nid: json_books[index].nid},tapholdHandler);})();}function tapholdHandler(event) {$("#dialogDelete").popup("open");var dialogCommit = $('#dialogCommit');dialogCommit.unbind("click");dialogCommit.click(function(){//删除书,然后刷新页面});$('#dialogCancel').click(function(){$("#dialogDelete").popup("close");});}
这样,问题基本上得到了解决。
0 0
- JQuery Mobile 开发学习手记(二):JS绑定的按钮动作不正确的问题
- JQuery Mobile 开发学习手记(一):JS批量设置按钮动作的问题
- jQuery Mobile的按钮
- JQuery Mobile 页面跳转后js不执行的问题(二)
- jQuery-Mobile学习(按钮)
- jquery mobile 按钮(二)
- jQuery Mobile的学习时间botton按钮的事件学习
- jQuery Mobile的学习时间botton按钮的事件学习
- jqm(jquery mobile)开发手记
- jquery mobile开发中常见的问题
- jquery mobile开发中常见的问题
- JQuery Mobile开发中遇到的问题
- js学习笔记(二):JQuery中的On绑定事件的方法
- jQuery的mobile开发
- jQuery Mobile 学习(二)
- js动态添加的元素,动作绑定
- jquery mobile开发中页面跳转后js不执行的问题
- jquery mobile开发中页面跳转后js不执行的问题
- 简单的C语言算法举例
- CATALOG READ权限
- Netflix Reveals All (well, at least a lot)
- C++中引用(&)的用法和应用实例
- ubuntu升级内核 virtualbox 出现Kernel driver not installed (rc=-1908)
- JQuery Mobile 开发学习手记(二):JS绑定的按钮动作不正确的问题
- 关于自增列的操作
- sss
- cocos2d-x 3.0深入了解之三
- J2EE Servlet 学习笔记
- 如何把输入的阿拉伯数字金额转换成中文大写金额
- ActivityStackSupervisor.StartActivityUncheckedLocked()函数分析
- 部署发布
- XML 名称不能以"1"来头