【问题标题】:Button needs to be clicked twice (Jquery)按钮需要单击两次(Jquery)
【发布时间】:2015-06-26 16:46:03
【问题描述】:

背景:尝试在单页网站上为移动设备构建全屏菜单。

问题:#handle div 需要点击 2 次才能执行操作。我尝试以不同的方式使用以下内容,但我似乎以某种方式错误地实现了它: 生/死, 绑定/解除绑定, 开关, 委托/取消委托。

我不明白我应该如何解决我的问题。抱歉,某些 div 上的 id-name 错误。

HTML

      <div id="overlay">
            <input type="checkbox" id="op"></input>

                <div class="overlay overlay-hugeinc">
                    <label for="op"></label>
                        <div id="nav">
                            <ul>
                                <li class="homescroll" class="overlayli">Home</li>
                                <li class="servscroll" class="overlayli">Services</li>
                                <li class="workscroll" class="overlayli">Work</li>
                                <li class="aboutscroll" class="overlayli">About</li>
                                <li class="contactscroll" class="overlayli">Contact</li>
                            </ul>
                        </div>
                </div>
      </div>

jQuery 单击 li 时,用户会向下滚动页面并隐藏菜单: 如果用户现在想再次打开菜单,则需要单击 2 次才能执行操作。

<script>
     $(document).ready(function () {  
         $('li').hover(             
              function () {
                $('li', this).fadeIn();
              },
              function () {                 
                $('li', this).fadeOut();
              }
            );
        $(".aboutcroll").off().on('click', function() {

          $('html, body').animate({
                scrollTop: $("#aboutdummy").offset().top
            }, 800);                
            $("#overlay").hide();
            $("#handle").on('click'); 
        });
    });
</script>

单击#handle 时,将打开覆盖全屏菜单:

<script>
    $(document).ready(function(){

        $("#handle").off().on('click', function() {
                $("#overlay").show();
        });
    });
</script>

【问题讨论】:

  • 我发现很难确定你真正的问题是什么。也许您可以编辑问题以完成每次点击,然后显示您认为正在触发的代码以及您期望它做什么以及它实际上在做什么
  • 每个li 都有多个类属性。这意味着浏览器会记住第一个或第二个类名,但不能记住两个类名。使用两个名称用空格分隔的一类,例如class="homescroll overlayli"。不确定这是否与这个特定问题有关。
  • 刚刚改了这个。不解决问题。不过谢谢!

标签: javascript jquery html css


【解决方案1】:

问题似乎出在您的 #handle onClick 函数上 在您使用的代码中

$("#handle").off().on('click', function() {
        $("#overlay").show();
});

这里 .off() 在第一次点击时移除事件监听器!尝试删除 .off()

同样对于滚动,你可以使用下面的代码(也是没有.off())

$("SELECTOR").click(function() {
    $('html, body').animate({
        scrollTop: $("#contact").offset().top
    }, 500);
     return false;
});

希望这对你有用!如果不是这样,如果您可以通过 jsFiddle 或 CodePen 共享您的代码会更好。

【讨论】:

  • 遗憾的是,这似乎也不能解决我的问题。返回 false 是为了什么?
  • 您能否提供您的代码的 jsFiddle 以便我们更好地了解您的问题?而“return false”是停止将事件传播到它的子元素。它类似于 event.returnValue = false (IE);或 event.stopPropagation() 或设置 event.cancelBubble = true (IE)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
相关资源
最近更新 更多