简单的方法来检查输入是否在焦点上,并禁用mouseleave功能,如果为真

Simple way to check if input is in focus and to disable mouseleave function if true

本文关键字:mouseleave 功能 如果 方法 检查 输入 焦点 是否 简单      更新时间:2023-09-26

我必须承认我绝对不是一个jQuery天才,但是这个看起来很简单的解决方案完全让我迷惑了。

基本上,我有一个下拉脚本在嵌套的ul上工作,以便在其父级翻转时显示。在其中一个嵌套的ul中,我有一个表单,如果在表单中输入了任何输入,我想要停止mouseleave事件。

原始代码:

$(document).ready(function() {  
/*------- navigation -------*/
$('.top_menu li').hover(function(){
    var index = $('.top_menu li').index(this);
    if($(this).children('ul').length != 0)
    {
        $(this).children('ul').show();
    }
});
$('.top_menu li').mouseleave(function(){
        $(this).children('ul').hide();
}); 

$('.login_cart li,.login_cart_captu li').hover(function(){
    var index = $('.login_cart li').index(this);
    if($(this).children('ul').length != 0)
    {
        $(this).children('ul').show();
    }
});
$('.login_cart li,.login_cart_captu li').mouseleave(function(){
        $(this).children('ul').hide();
});
}); 

我真的只关心脚本的。login_cart li部分-这是其中唯一有表单的部分。

我已经尝试了一个简单的if/else语句来不隐藏输入是否有焦点,但到目前为止还没有工作。

任何人能给我任何帮助或阐明这一点将是绝对美妙的。

提前感谢!

您可以将表单元素的焦点事件绑定到一个函数,该函数将从.login_cart中解绑定mouseleave事件li:

$("#<form-id> input").focus(function() {
    $(".login_cart li, .login_cart_captu li").unbind("mouseleave");
}

你只需要替换为你的表单的id或者你可以使用任何选择器来选择你的表单

jQuery 1.6及更新版本内置了:focus。没有用。Not()测试过,但是用!在前面和。is(":focus"),只是看起来更好与。not();但是两者应该是一样的。

 $('.login_cart li,.login_cart_captu li').mouseleave(function(){
       if ($("#<form-id> input").not(":focus")) {
           $(this).children('ul').hide();
       }
 });