当用户点击正文或外部下拉菜单中的任意位置时,下拉菜单关闭

时间:2014-10-22 10:57:11

标签: jquery

JSFiddle Demo

HTML

<input type="text" class="js-search" name="" value="">

<div class="category-list">
  <i class="icon-close"></i>
  <div class="select-column">
    <ul>
      <li>
        <a class="category-select" href="#">Test1</a>
      </li>
      <li>
        <a class="category-select" href="#">Test2</a>
      </li>
      <li>
          <a class="category-select" href="#">Test3</a>
        </li>
      </ul>
  </div>
</div>

JQuery的

var search = $('.js-search');
var menu = $('.category-list');
var close = $('.icon-close');
var category = $('.category-select');
 search.on('click', function(e){
    e.preventDefault();
    menu.fadeIn("normal", function() {
       $(this).show();
         $(document).click(function(e){
            menu.fadeOut("normal", function() {
           $(this).hide();
});
     });
    close.on('click', function(){
      menu.fadeOut("normal", function() {
        $(this).hide();
        });
    });
    category.on('click', function(){
      var el = $(this);
      search.val("");
      menu.fadeOut("normal", function(){
        $(this).hide();
      });

      search.val(el.text());
    });
 });
 });
$('body').click(function(e) {
     if ($(e.target).closest(menu).length === 0) {
        menu.fadeOut("normal", function() {
          $(this).hide();
          });
     }
 });

管理显示或隐藏下拉菜单也使用淡化类。只剩下的问题是菜单会在每次点击输入字段时继续打开和关闭。看起来谷歌回答,但徒劳无功。可能忽略了一些遗漏的东西。或者代码不对。

帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

click处理程序中没有“click处理程序”的简化代码。整个想法是在<input>点击打开下拉菜单,将选定的<a>文字放入<input>,并隐藏点按下<input>以外的任何地方:

Updated fiddle

$(document).ready(function()
{
    var search = $('.js-search');
    var menu = $('.category-list');
    var category = $('.category-select');

    search.on('click', function()
    {
        menu.fadeIn("normal");
        return false;
    });

    category.on('click', function()
    {
        search.val($(this).text());
    });

    $(document).on('click', function()
    {
        menu.fadeOut("normal");
    });
});