jQuery   发布时间:2022-04-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jquery – Focusout被触发两次大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个文本框和一个 Jquery UI对话框.当用户输入文本框并按Enter键时,我想显示该对话框.为了实现这一点,我使用以下代码

$(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>

http://jsfiddle.net/7Fpm4/1

问题是当我按Enter键时,焦点输出调用两次,一次来自input.focusout(),第二次是紧接在focusout事件处理程序中的HelpDial.dialog(‘open’)之后.这会导致创建两个背景叠加层,当我关闭对话框时,一个叠加层仍然可见.

我究竟做错了什么?有没有更好的方法来处理这种情况 – ‘在文本字段中按下一个输入打开一个jQuery对话框’.谢谢.

解决方法

阻止事件触发的唯一方法是取消绑定事件处理程序.或者,根据具体情况,根据事件发生时可用的信息采取差异化行动.

只要元素失去焦点,就会触发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');                
    }

});

http://jsfiddle.net/8L7EL/1/

这段代码正在做的是将一个函数绑定到focusin处理程序中的focusout.如果用户离开文本框,将调用focusout事件处理程序,该处理程序立即取消绑定焦点事件(以防止多次绑定该函数).如果用户按下回车键,则手动调用函数,在打开对话框之前删除聚焦事件处理程序,以防止在对话框打开时触发聚焦事件自动触发.

大佬总结

以上是大佬教程为你收集整理的jquery – Focusout被触发两次全部内容,希望文章能够帮你解决jquery – Focusout被触发两次所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。