大佬教程收集整理的这篇文章主要介绍了jquery – Focusout被触发两次,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
$(document).ready(function () { var HelpDial = $('#HelpDialog'); var input = $('#HelpSearch'); HelpDial.dialog({ width: 800,autoOpen: false,modal: true,title: "Templates",position: [165,158] }); input.focusin(function () { HelpDial.dialog('close'); }).focusout(function () { HelpDial.dialog('open'); }).on('keypress',function (E) { var code = (e.keyCode ? e.keyCode : e.which); if (code == 13) { input.focusout(); return false; } }); }); <input id="HelpSearch" /> <div id="HelpDialog"></div>
问题是当我按Enter键时,焦点输出被调用两次,一次来自input.focusout(),第二次是紧接在focusout事件处理程序中的HelpDial.dialog(‘open’)之后.这会导致创建两个背景叠加层,当我关闭对话框时,一个叠加层仍然可见.
只要元素失去焦点,就会触发focusout事件.在这种情况下,每次用户单击文本框时,都会触发focusin事件.一旦光标离开文本框(在打开对话框时发生),就会触发焦点输出事件.
代码的问题在于您强行调用focusout事件,然后在打开对话框时自然调用focusout事件.因此,请按以下方式更改代码:
$(document).ready(function () { var HelpDial = $('#HelpDialog'); var input = $('#HelpSearch'); HelpDial.dialog({ width: 800,158] }); input.on('focusin',function () { input.on("focusout",textBoxFocusOut); }).on('keypress',function (E) { var code = (e.keyCode ? e.keyCode : e.which); if (code == 13) { textBoxFocusOut(); } }); function textBoxFocusOut() { input.off("focusout",textBoxFocusOut); HelpDial.dialog('open'); } });
这段代码正在做的是将一个函数绑定到focusin处理程序中的focusout.如果用户离开文本框,将调用focusout事件处理程序,该处理程序立即取消绑定焦点事件(以防止多次绑定该函数).如果用户按下回车键,则手动调用该函数,在打开对话框之前删除聚焦事件处理程序,以防止在对话框打开时触发聚焦事件自动触发.
以上是大佬教程为你收集整理的jquery – Focusout被触发两次全部内容,希望文章能够帮你解决jquery – Focusout被触发两次所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。