【问题标题】:Keep dropdown visible while input boxes are focused在输入框聚焦时保持下拉可见
【发布时间】:2013-03-08 21:11:12
【问题描述】:

我的导航栏有用于登录和搜索的下拉“字段集”,如下所示:

<div class="nav-button" id="nav-box">
        <a class="inside-link">
            <span id="inside-text">Sign in</span>
        </a>
        <fieldset id="menu-box" class="menu-box">
            <form method="post" id="forms" class="forms" action="checklogin.php">
                <label for="username">Username or email</label>
                <input type="text" id="username" name="username" value="" title="username" tabindex="4">

                <label for="password">Password</label>
                <input type="password" id="password" name="password" value="" title="password" tabindex="5">

                <input type="submit" id="small-btn" value="Sign in" tabindex="6">
                <input type="checkbox" id="remember" name="remember_me" value="1" tabindex="7">
                <label for="remember">Remember me</label>
                <br />
                <a href="#"id="resend_password_link">Forgot your password?</a> 
                <a id='forgot_username_link' title="If you remember your password, try logging in with your email" href="#">Forgot your username?</a> 
            </form>
        </fieldset>
    </div>

我这里有个小提琴:http://jsfiddle.net/WBrns/5/

虽然像“搜索”、“用户名”和“密码”这样的输入框是焦点,但我希望相关的下拉菜单不会消失,这样用户在输入时不必将鼠标放在下拉菜单中。

CSS 中的第 288 行是我们的第一次尝试,这显然行不通。我的网站已经包含 jQuery,因此任何 js/jquery 解决方案都是可以接受的(因为我认为纯 css 不可能)

谢谢!

【问题讨论】:

  • 您可以在输入中添加focusinfocusout 上的侦听器,以删除(聚焦)或重新附加(聚焦)允许您隐藏菜单的 CSS 类。跨度>

标签: css drop-down-menu input hover focus


【解决方案1】:

在您的 hover 样式中,确保属性具有 !important 命令,然后使用下面的代码,同时记住将 id 和类替换为您需要的:

$("input").focus(function () { that=this;
    $(this).parent(".drop").css("display", "block");

    $(this).blur(function() {
        $(that).parent(".drop").css("display", "none"); 
    });
})

您可以在此处查看示例:http://jsfiddle.net/WBrns/12/

如果用户开始键入,即使将鼠标移开,下拉菜单也不会消失。但是,如果他们在下拉菜单之外单击,它将被隐藏。

【讨论】:

    【解决方案2】:

    为了改进 Shaz 的回答,您可以命名模糊事件,以防止多个模糊事件附加到同一个输入。我还建议使用类名和 CSS 来显示和隐藏下拉菜单,以便您可以利用 CSS 过渡。

    JS

    $('input').focus(function () {
      var $this = $(this);
      var $drop = $this.parents('.drop');
    
      $drop.addClass('open');
      $this.bind('blur.closeDrop', function () {
        $drop.removeClass('open');
        $this.unbind('blur.closeDrop');
      });
    });
    

    CSS

    .drop {
      opacity: 0;
      pointer-events: none;
      transition: opacity 0.2s ease;
    }
    .drop.open {
      opacity: 1;
      pointer-events: auto;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      相关资源
      最近更新 更多