下拉列表问题

时间:2011-05-06 07:54:19

标签: javascript jquery

HTML

   <a id="btn" class="btn" href="#."></a>
   <div id="main-dropdown" class="hide">
       <ul id="dropdown">
          <li><a href="/">Back </a></li>
          <li><a href="/foo">Foo </a></li>
          <li><a href="/bar">Bar </a></li>
          <li><a href="/baz">Baz </a></li>
          <li><a href="/no">No Bar </a></li>
       </ul>
   </div>

Jquery的

$(".btn").click(function(e) {
    e.preventDefault();
    $("#main-dropdown").removeClass('hide');
    $("#main-dropdown").addClass('show');
    return false;
});

$("#dropdown").mouseup(function() {
    return false
});

$(document).mouseup(function(e) {
    if($('#main-dropdown').hasClass('show')) {
        $("#main-dropdown").removeClass('show');
        $("#main-dropdown").addClass('hide');
        return false;
    }
    $("#main-dropdown").removeClass("show");
    $("#main-dropdown").addClass("hide");
});

问题: 当我点击href(id = btn)时会出现一个下拉菜单,但是当我再次单击该按钮时应该隐藏 这没有发生。我做错了。

5 个答案:

答案 0 :(得分:0)

我不确定你想做什么,但试试这个:http://jsbin.com/ehola3/edit

答案 1 :(得分:0)

更改

$("#dropdown").mouseup(function() {
    return false
});

$("#dropdown a").click(function() {
    return false;
});

更多笔记

  1. return false;事件中删除mouseup,因为该事件没有默认操作。
  2. 无需同时为e.preventDefault();return false调用链接..一个就足够了。 (如果你想停止冒泡,那么只使用return false
  3. 查看.toggleClass()
  4. 简化版

    $(".btn").click(function(e) {
        e.preventDefault();
        if($('#main-dropdown').hasClass('hide')){
            $("#main-dropdown").toggleClass('hide show');
        }
    });
    
    $("#dropdown a").click(function() {
        return false;
    });
    
    $(document).mouseup(function(e) {
          if($('#main-dropdown').hasClass('show')) {
            $("#main-dropdown").toggleClass('hide show');
        }
    });
    

    演示 http://jsfiddle.net/gaby/yjWNg/1/


    更新评论

    我们应该在所有情况下处理click事件,这是一个小错误。

    $(".btn").click(function(e) {
        e.preventDefault();
        e.stopPropagation();
        $("#main-dropdown").toggleClass('show hide');
    });
    
    $("#dropdown a").click(function() {
        return false;
    });
    
    $(document).click(function(e) {
          if($('#main-dropdown').hasClass('show')) {
            $("#main-dropdown").toggleClass('hide show');
        }
    });
    

    演示 http://jsfiddle.net/gaby/yjWNg/5/

答案 2 :(得分:0)

$(".btn").click(function(e) {
    e.preventDefault();
    if($("#main-dropdown").hasClass('hide')){
        $("#main-dropdown").removeClass('hide');
        $("#main-dropdown").addClass('show');
    }
    else{
        $("#main-dropdown").removeClass('show');
        $("#main-dropdown").addClass('hide');
    }
    return false;
 });

类似的东西?

答案 3 :(得分:0)

您应该使用toggle()来显示和隐藏内容。

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  <button>Toggle</button>
<p style="display: none">Hello</p>
<script>

$("button").click(function () {
  $("p").toggle("show");
});
</script>

</body>
</html> 

答案 4 :(得分:0)

您可以使用toggleClass来切换hide

$(".btn").click(function(e) {
    e.preventDefault();
    $("#main-dropdown").toggleClass('hide');
});

工作示例:HERE

<强> HTML:

<a href="#" class="btn">Show/Hide</a>
<div id="main-dropdown" class="hide">
    <ul id="dropdown">
      <li><a href="/">Back </a></li>
      <li><a href="/foo">Foo </a></li>
      <li><a href="/bar">Bar </a></li>
      <li><a href="/baz">Baz </a></li>
      <li><a href="/no">No Bar </a></li>
    </ul>
</div>

<强> JQUERY:

$(".btn").click(function(e) {
    e.preventDefault();
    $("#main-dropdown").toggleClass('hide');
});

<强> CSS:

.hide {display: none;}