【问题标题】:Why is this jQuery click function not working?为什么这个 jQuery 点击功能不起作用?
【发布时间】:2013-09-03 22:12:45
【问题描述】:

代码:

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $("#clicker").click(function () {
        alert("Hello!");
        $(".hide_div").hide();
    });
</script>

上面的代码不起作用。当我单击#clicker 时,它不会发出警报,也不会隐藏。我检查了控制台,没有收到任何错误。我还检查了 JQuery 是否正在加载,确实如此。所以不确定是什么问题。我还做了一个带有警报的文档准备功能,并且该功能有效,因此不确定我做错了什么。请帮忙。谢谢!

【问题讨论】:

标签: javascript jquery onclick click onclicklistener


【解决方案1】:

您应该在 $(document).ready(function() {}); 块中添加 javascript 代码。

即

$(document).ready(function() {
  $("#clicker").click(function () {
    alert("Hello!");
    $(".hide_div").hide();
  });
});

正如jQuery documentation 所说:“在文档“准备好”之前,无法安全地操作页面。jQuery 会为您检测到这种准备状态。包含在$( document ).ready() 中的代码只会在页面文档对象模型中运行一次(DOM) 已准备好执行 JavaScript 代码”

【讨论】:

  • 我多么愚蠢!仍然在学习。我以为我单击功能不需要一个,因为它是在单击 vs document.ready 时激活的,它在页面加载时加载。
  • @starbucks 不要太担心,每个人都会犯错,尤其是在学习的时候:)
  • 文档就绪函数根据在页面上找到的内容设置侦听器。如果你不这样做,它们永远不会被设置。然而,最好的方法是使用“on()”函数来委托它们。这样,任何添加到页面加载后的元素仍然可以工作!
  • 另外,使用“on”功能,您实际上不需要使用文档准备功能。它将侦听器设置为文档级别,然后抓取页面以供要侦听的元素。这就是为什么更具体地说明你想听什么元素类型会更快一点,比如“div.listentome”而不是“.listentome”。在本例中,它只检查 div,而不是检查“listentome”类的每个元素。
  • @SeanKendle - 这不是.on() 的工作方式。您可以(可选)使用它来创建委托处理程序,但无论哪种方式它都不会“抓取页面”,它会将侦听器绑定到您调用它的 jQuery 对象中的特定元素。
【解决方案2】:

我找到了解决这个问题的最佳解决方案,方法是使用 ON 和 $(document)。

 $(document).on('click', '#yourid', function() { alert("hello"); });

id 开头如下:

$(document).on('click', 'div[id^="start"]', function() {
alert ('hello'); });

最后 1 周后我不需要添加 onclick 触发器。 希望对很多人有帮助

【讨论】:

  • 啊,谢谢,上面的方法对我不起作用,但它起作用了! (可能与角度和路由有一些奇怪的交互)
  • 就像 Flink 一样,我也解决了这个问题。谢谢.. 100 upvote..
  • 称为委托,动态插入或移动的内容需要用到
【解决方案3】:

您的代码可以在没有 document.ready() 的情况下工作,只需确保您的脚本位于 #clicker 之后。查看此演示:http://jsbin.com/aPAsaZo/1/

准备好的概念中的想法。如果您确定您的脚本是页面中的最新内容,或者位于受影响的元素之后,它将起作用。

<!DOCTYPE html>
<html>
<head>


<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
  <script src="https://code.jquery.com/jquery-latest.min.js"
        type="text/javascript"></script>
  <a href="#" id="clicker" value="Click Me!" >Click Me</a>
  <script type="text/javascript">

        $("#clicker").click(function () {
            alert("Hello!");
            $(".hide_div").hide();

        });


</script>

</body>
</html>

注意: 在 演示中,将代码中的http 替换为https,或使用此变体Demo

【讨论】:

  • +1 - 您的回答解释了为什么需要document.ready() 函数。
  • 这是一个更好的答案,因为 jquery 脚本必须位于“document.ready()”函数中的建议具有误导性。是的,那里更安全,但是如果您为 jquery 函数动态设置 html 元素(例如根据单击的按钮查询表行),它需要在该函数之外/之后。我错误地更改了弹出叠加层的目标 div 的名称,然后花了几个令人沮丧的小时寻找脚本错误。吸取了很多教训。
  • 这是一个错误的答案,因为 JS 代码应该在 DOM 的头部而不是内联。您花了几个小时寻找脚本错误的事实不是 JS 问题,而是您没有正确阅读文档并且不知道如何使用调试工具的问题。
  • @AndreyShipilov 谁说的,看看这个页面的源码,往下看,你会看到javascript代码。
  • @AndreyShipilov - 你知道如何使用调试工具来解决这个问题吗?然后请与他人分享您的知识,而不是冒犯他们。尽量做到建设性和公平。
【解决方案4】:

尝试将$(document).ready(function(){ 添加到脚本的开头,然后添加});。另外,div 中是否有正确的 id,即作为 id,而不是类等?

【讨论】:

    【解决方案5】:

    你必须用$(document).ready(function(){});包装你的Javascript代码看JSfiddle。

    JS 代码:

    $(document).ready(function() {
    
        $("#clicker").click(function () {
            alert("Hello!");
            $(".hide_div").hide();    
        });
    });
    

    【讨论】:

      【解决方案6】:

      确保您的按钮(例如 div 或透明的 img)上没有任何东西阻止点击该按钮。 这听起来很愚蠢,但有时我们认为 jQuery 无法正常工作,所有这些都是问题,问题在于 DOM 元素的定位。

      【讨论】:

      • 或者,例如,z-index!
      【解决方案7】:

      您可以使用$(function(){ // code });,它在文档准备好执行该块内的代码时执行。

      $(function(){
          $('#clicker').click(function(){
              alert('hey');
              $('.hide_div').hide();
          });
      });
      

      【讨论】:

        【解决方案8】:

        快速检查一下,如果您使用的是客户端模板引擎,例如把手,您的 js 将在 document.ready 之后加载,因此不会有元素可以绑定事件,因此要么使用 onclick 处理程序,要么使用它在身体上并检查当前目标

        【讨论】:

        • 确实如此,我正在使用flask/jinja,除非我在HTML中使用onclick属性并从那里引用我的中的函数,否则它不起作用
        【解决方案9】:

        适当的浏览器重新加载

        如果您将 js 文件分开保存,也请快速检查一下:确保正确重新加载您的资源。浏览器通常会缓存文件,因此只需确保在您加载的资源中纠正了以前的拼写错误。

        请参阅this answer,了解 Chrome/Chromium 中的永久缓存禁用。否则,您通常可以使用 this answer 中提到的 Ctrl+F5 或 Shift+F5 强制完全重新加载.

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-14
          • 2018-11-04
          • 1970-01-01
          • 2018-02-09
          相关资源
          最近更新 更多