jquery触发器函数执行两次的解决方案
本文说明了jquery触发器函数执行两次的解决方案。分享给大家参考,如下:
一、问题如下:
有以下代码:
hearteta http-equiv=' Content-Type ' Content=' text/html;charset=utf-8 '/title/title style type=' text/CSS ' * { margin 33600;划水:0;} body { font-size : 13px;线高:130%;padding: 60px} p { width:200px背景技术: # 888;颜色:白色;height:16px}/style script src=' http : jquery-1 . 6 . 4 . js ' type=' text/JavaScript '/script script type=' text/JavaScript ' $(function(){ $(' # old ')。bind('click ',function(){ $('input '))。触发器(“焦点”);});$('#new ')。bind('click ',function(){ $('input '))。triggerHandler(' focus ');});$(“输入”)。focus(function(){ $('body '))。追加(' pfocus。/p ');})});/script/headsdybutton id=' old '触发器/button button id=' new ' trigger handler/button input//body/html functions此处:
$('#old ')。bind('click ',function(){$('input '))。触发器(“焦点”);});火狐中只触发一次,即输出一个焦点;
但是它在ie中被触发了两次,也就是两次聚焦;同时被输出。
二、解决方案:
首先,分析trigger和triggerHandler。使用triggerHandler不会触发浏览器的默认事件,也不会导致事件冒泡(其他区别请参见jQuery文档)。这种虫子的罚单。在这个问题上做出承诺。JQuery实现了一个事件对象来解决浏览器之间的差异。但由于mouseenter/mouseleave等非标准事件的存在,jQuery引入了特殊事件子系统,使原始事件返回到模拟事件的事件队列中。然而,这个系统不能解决所有的问题。使用trigger.focus时,IE会错误地执行两次回调。
TriggerHandler是触发器问题的解决方案。但是当您使用triggerHandler时,您会发现输入没有光标聚焦效果。
初步解决方案:
除了使用triggerHandler,另一个方法是添加:
Event.preventDefault(),但是你发现它没有达到我们的预期,因为焦点事件回调被执行了,但是它甚至没有焦点效果。
最终解决方案:
因为它是由jQuery封装的关系,所以我们可以使用本机事件。看,左侧由本机事件触发,右侧由triggerHandler触发。
$(“输入”)[0]。焦点();
更多对jQuery感兴趣的读者,请查看本站话题:《jQuery拖拽特效与技巧总结》、《jQuery扩展技巧总结》、《jQuery常见经典特效汇总》、《jQuery动画与特效用法总结》、《jquery选择器用法总结》、《jQuery常用插件及用法总结》、0103010。
希望本文对大家的jQuery程序设计有所帮助。
版权声明:jquery触发器函数执行两次的解决方案是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。