【问题标题】:jquery expand <li> right and collapse leftjquery 向右展开 <li> 向左折叠
【发布时间】:2012-01-19 00:43:22
【问题描述】:

试图让菜单li 向右展开,在click 事件上显示搜索表单,然后在单击搜索表单本身之外的任何内容时再次关闭。我已经设法让扩展工作,但无法弄清楚崩溃。我知道已经有很多关于这个的问题,但我想我太累了,无法理解它......任何帮助表示赞赏。

UDPATE:

设法通过mouseleave() 事件获得效果:http://jsfiddle.net/C3YCP/31/

但出于好奇,我无法通过某种点击事件使其崩溃?

HTML:

<li id="search">
    <a href="#" title="Search" id="searchA">Search</a>
    <div id="searchWrap">
        <form> 
            <fieldset> 
                <input type="text">  
            </fieldset>
        </form>
    </div>
</li>

JS:

$("#search").click (function() {
    $(this).animate({width:'225px'},200).css("background-color","#e5e6e7");
    $("#searchA").animate({width:'180px'},200)','color':'#4d4d4d'});
    $('#searchWrap').show("slide", 200);
    $("#search input").css({'background-color':'#fff'});
    });
$("#searchWrap").click(function() { 
return false;
});

CSS:

#search { width: 112px; }
#searchA { color: #fff; padding: 18px 35px 53px 9px; } 
#searchWrap { position: absolute; top: 53px; left: 10px; display: none; }
#search form { padding: 0 10px 0 0; }
#search fieldset { border: none; }
#search input { width: 200px; height: 20px; border: 1px solid #fff; background-color:#4D4D4D; outline: none; color: #4D4D4D; padding: 0 0 0 3px;}

【问题讨论】:

    标签: jquery css menu navigation collapse


    【解决方案1】:

    试试这个:

    $("#search").click(function() {
        $(this).animate({width:'225px'},200).css("background-color","#e5e6e7");
        $("#searchA").animate({width:'180px'},200).css({'background-image':'url(images/nav-searchgrey.png)','color':'#4d4d4d'});
        $('#searchWrap').show("slide", 200);
        $("#search input").css({'background-color':'#fff','border-color':'#BBBDBF'});
    
        $('body :not(#searchWrap)').one(function() {
          // Hide search.
        });
    });
    

    【讨论】:

    • 哇,这只能运行一次——为什么要使用one()
    • 因为每次点击#search 时都会附加.one() 并且不会不必要地触发。
    • 啊,有道理……很好!
    • 问题可能是你的 jQuery 版本。您正在使用1.4。 jQuery 1.7.1 几周前问世了。
    • 试过了还是不行?你介意看看这个小提琴吗? jsfiddle.net/C3YCP/27
    【解决方案2】:

    'blur' 是当用户“取消聚焦”当前聚焦的字段时调度的事件。您可以使用 jQuery 中的 blur 方法直接监听该事件:

    $('#searchWarp input:first').blur(function(event) {
        // reverse the actions that you made on the 'mouseup' event handler
    }
    

    祝你好运!

    【讨论】:

      【解决方案3】:

      使用 HTML 点击检测搜索之外的点击

      $('html').click(function() {
         //Change the CSS here to hide
      });
      

      别忘了包含 event.stopPropagation();

      你的情况

      $("#search").mouseup(function(event) {
          $(this).animate({width:'225px'},200).css("background-color","#e5e6e7");
          $("#searchA").animate({width:'180px'},200).css({'background-image':'url(images/nav-searchgrey.png)','color':'#4d4d4d'});
          $('#searchWrap').show("slide", 200);
          $("#search input").css({'background-color':'#fff','border-color':'#BBBDBF'});
          event.stopPropagation();
       });
      

      【讨论】:

      • 将点击附加到整个html 标记包括搜索本身。
      • 是的,这就是我们必须使用 event.stoppropogation() 的原因,所以在搜索时它会忽略 HTML 点击事件。
      • 但是当你点击搜索时它会触发stopPropagation()。另外,您忘记将event 参数添加到搜索mouseup 功能——否则event.stopPropagation() 将不起作用。
      猜你喜欢
      • 2014-09-03
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 2012-05-15
      • 2018-06-13
      • 1970-01-01
      相关资源
      最近更新 更多