javascript - 为什么jquery中的click在加载页面时只起作用一次

标签 javascript jquery

为了澄清这个问题,让我举一个如下的例子。
我有三个<div>如下所示的元素:

  <div id="fail-item" class="toolbar-item">
  Fail
  </div>
  <div id="warn-item" class="toolbar-item">
  Warn
  </div>
  <div id="pass-item" class="toolbar-item">
  Pass
  </div>

我为每个 <div> 添加了点击监听器使用 Jquery 列出如下:

<body>
  <script>
    $("div.toolbar-item").click(toolbar_click_listener());

    function toolbar_click_listener(){
        console.log("what happens");
    }   
  </script>
</body>

但是,当我加载页面时,我只能看到“发生了什么”打印一次,任何进一步的点击事件都会发生在 <div> 上。元素根本不起作用。

我搜索过SO但未能得到答案。你知道这里出了什么问题吗?

最佳答案

它应该是处理程序中的函数引用,而不是函数调用。

您的点击处理程序不应在页面加载时调用。发生这种情况是因为您在这里调用它 .click(toolbar_click_listener()); 您不会想要这样的。

当您想要为事件分配处理程序时。您引用该函数而不是调用它。

将其更改为 .click(toolbar_click_listener);,您将看到预期的行为

$("div.toolbar-item").click(toolbar_click_listener);

    function toolbar_click_listener(){
        console.log("what happens");
    }  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="fail-item" class="toolbar-item">
  Fail
  </div>
  <div id="warn-item" class="toolbar-item">
  Warn
  </div>
  <div id="pass-item" class="toolbar-item">
  Pass
  </div>

关于javascript - 为什么jquery中的click在加载页面时只起作用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49995524/

相关文章:

javascript - 从文本框中即时选择文本会遗漏javascript中的最后一个字符

javascript - 如何创建固定的js slider

jquery - 如何在下拉列表中的最后一个li之前附加

javascript - 如何通过 zapier webhook 通过 twilio 发送 Whatsapp 消息

jQuery UI 可拖动动画,同时捕捉到网格

javascript - 截取许多网页

javascript - 有什么方法可以优化这个可能呈现数百万个组件的 React 应用程序

javascript - jQuery:外部插件调用选项中的 If 条件

javascript - 使用 angularjs 检测未保存的更改并提醒用户

javascript - 将 ":"替换为 "-",同时格式化 mac 地址