【问题标题】:on("click", event) firing without clicking [duplicate]on("click", event) 在不点击的情况下触发 [重复]
【发布时间】:2016-04-04 10:53:09
【问题描述】:

关于这个主题有类似的问题,但他们的答案对我的问题不起作用。

我正在尝试使用 jQuery 的 on("click") 来触发一个函数,该函数只是更改被点击的 id 的类。但是该函数在页面加载时被调用,然后如果你点击什么应该触发它不会触发的函数。

这里是html:

<nav>
    <ul>
        <li id="all" class="tab-current"><a><span>All Departments</span></a></li>
    </ul>
</nav>

这里是js:

var $all = $("#all");
$all.on("click", function(){
    tabClicked("all");
});

我也试过这个:

$all.on("click", tabClicked("all"));

这是函数:

function tabClicked(input){
    //do some stuff here
}

有什么想法吗?提前致谢! :)

【问题讨论】:

  • $(function)$(document).ready 的简写

标签: javascript jquery web


【解决方案1】:

您的点击处理程序逻辑中有错误;您只需将匿名函数传递给处理程序:

$all.on("click", function(){
    tabClicked("all");
});

您原来的$(function() {}); 等同于$(document).ready(),因此无论元素是否被点击,它都会立即执行。

【讨论】:

  • 我怀疑它会抛出任何语法错误。编辑:一旦调用 click 就会出现。
  • 页面加载时不会触发,但点击时也不会触发...
  • @PabloDuque 这应该可以正常工作。检查页面中的控制台是否有其他错误。
  • @RayonDabre 是的,这是一个语法错误,因为它不是所需行为的正确语法,而不是实际错误。更新了答案以更清晰。
  • 如您所见,这很好用:jsfiddle.net/6au8zf9g。我认为这不起作用的唯一方法是,如果您有多个元素都具有相同的 idall,这是无效的 HTML,您应该将它们更改为一个类。
【解决方案2】:
var $all = $("#all");

$all.on("click", function(){
    tabClicked("all");
});

尝试像这样编辑它。 $(function() {}); 就像$(document).ready(),所以用function(){} 代替$(function() {});

编辑:

由于某种原因,如果script 标签位于 html 中的元素之后,则会触发。我用外部 JS 等尝试了你的代码 - 没有用。

试试这样:JSFiddle

编辑 2:您应该将处理程序放在 $(document).ready() 函数中您想要的任何位置,这就是原因。

$( document ).ready(function() {
 var $all = $("#all");
 $all.on("click", function(){
    alert("click");
 });
});

【讨论】:

    【解决方案3】:

    把$(function()替换成函数()

    【讨论】:

    • 页面加载时不会触发,但点击时也不会触发...
    • 为什么是 var $all = $("#all");当你可以直接在函数状态中添加时 $( "#all" ).on( "click", function() { tabClicked("all") ; });
    • 好吧,我多次使用它,并且只需 $all 就可以更短地调用它。但这不是这里的问题
    • 请重新检查代码。为什么因为我刚刚替换了本地的函数()代码,它工作正常!
    • 我已经重新检查了很多次...没有成功
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多