代码之家  ›  专栏  ›  技术社区  ›  nLL

我疯了吗?jquery.click()似乎不起作用

  •  2
  • nLL  · 技术社区  · 13 年前

    下面的代码不适用于任何浏览器。它应该显示一个警告框。我做错什么了?

     <html>
     <head>
     <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.3.min.js"></script>
     <script type="text/javascript">
    $('#prevlink').click(function () { 
      alert("Test"); 
    });  
    </script>
    </head>
    <body>
    <a id="prevlink" href="#">test</a>
    </body>
    </html>
    
    5 回复  |  直到 9 年前
        1
  •  4
  •   Pekka    13 年前

    您没有将函数包装在 ready() event . 它在dom存在之前运行。

        2
  •  5
  •   Mike Robinson    13 年前

    把它放进文件里。准备好了!

        3
  •  1
  •   T.J. Crowder    13 年前

    您试图在元素存在之前访问它(javascript是通过HTML解析/呈现内联运行的)。您可以使用 ready jquery提供的事件,正如pekka和mike指出的,或者只是确保您正在尝试访问元素 之后 它存在:

    <html>
    <head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.3.min.js"></script>
    </head>
    <body>
    <a id="prevlink" href="#">test</a>
    <script type="text/javascript">
    // By this time we get here, it exists.
    $('#prevlink').click(function () { 
        alert("Test"); 
    });  
    </script>
    </body>
    </html>
    

    前者(使用 准备好的 事件或类似事件)更“不引人注目”,当您与大型团队打交道时,这非常有用,因为您的HTML设计者和JavaScript编码人员通常都是不同的人。后者发生得更快(链接出现后和挂接单击事件之前时间间隔不小),而且 what the Google Closure team recommend 用于连接元素处理程序。

    即使使用第二种方法,也可以保留JavaScript和HTML 合理地 分开,确保 script 标记只是一个设置元素的调用,它本身没有实际的逻辑。

        4
  •  0
  •   vener    13 年前

    因为在HTML完成下载之前执行的javascript代码 用这个代替你的代码

    $(document).ready(function(){
    $('#prevlink').click(function(){
      alert("Test");
    });
    })
    
        5
  •  0
  •   Conner antpaw    12 年前

    将代码更改为:

    $(function()
    {
      $('#prevlink').click(function () { 
        alert("Test"); 
      });
    });