【问题标题】:JQuery statement if/else not working on click function, runs if and else partJQuery 语句 if/else 不能在 click 函数上工作,运行 if 和 else 部分
【发布时间】:2026-01-09 07:30:01
【问题描述】:

首先我验证元素的文本是否为“ocultar menu”,如果是,我更改文本并将隐藏类添加到其他一些元素。我的意图是该函数在那里中断,并且仅在事件开始时查看文本的值,而当我在函数内部更改它时则看不到。但是当我单击一次时,它在浏览器的控制台中显示为隐藏,非常快,就像函数检查值并继续检查并传入 if 和 else 部分代码。我使用了 StopPropagation() 但不起作用,我尝试将 on 事件更改为单击但也不起作用。需要帮助,谢谢。

   var $position = $("#ocult-menu").position();
    $("#ocult-menu").on("click",function(){ 
        var $text = $(this).find('p').text();
        if ($text == "ocultar menu"){
            $(".info").addClass("hide");
            $(".photo").addClass("hide");
            $(".map").addClass("hide");
            $(".similar").addClass("hide");
            $(".share").addClass("hide");
            $("#menu-single").offset({left: $position.left});
            $(".exibir").css("background-position","-1px 430px");
            $(this).find('p').text("exibir menu");
        }
        else if( $text == "exibir menu"){
            $(".info").removeClass("hide");
            $(".photo").removeClass("hide");
            $(".map").removeClass("hide");
            $(".similar").removeClass("hide");
            $(".share").removeClass("hide");
            $("#menu-single").offset({left: $position.left});
            $(this).find('p').text("ocultar menu");
        }
    });

【问题讨论】:

  • 你能发布你的控制台输出吗?
  • 您的 HTML 标记不清楚,但请注意 $(this).find('p').text() 会找到所有 <p>s 的所有文本
  • #ocult-menu是什么类型的元素?是 a 正在重新加载页面吗?如果您创建一个演示该问题的小提琴将会有所帮助。

标签: javascript jquery if-statement logic


【解决方案1】:

您可能会多次添加 onclick 处理程序,导致每次点击执行多次。尝试添加一些日志语句,如下所示:

$("#ocult-menu").on("click",function(){ 
    console.log("onclick");
    ...
    if ($text == "ocultar menu"){
        console.log("text = ocultar menu");
        ...
    }
    else if( $text == "exibir menu"){
        console.log("text = exibir menu");
        ...
    }
});

如果您看到“onclick”被多次记录,那就是问题所在。然后您可以将此处理程序设置代码移动到您的初始一次性页面加载函数中。

$(function() {
    $("#ocult-menu").on("click",function(){
        ...
    });
});

希望对您有所帮助。

【讨论】:

  • 我做了这个,但没有用,它两次不同......现在我看到在网站的其他部分也发生了这种情况,当我进行 ajax 调用时,它调用两次,我该怎么办?它是 On click 中的一个事件...我在里面调用的一个函数被调用了两次
  • 添加我建议的console.log语句后,您在日志中看到了什么?
【解决方案2】:

好吧,我在网站上看到点击事件被调用了两次,如果我去控制台输入 $("#ocult-menu").click() 效果很好

【讨论】: