为什么这个jQuery点击功能不起作用?

sta*_*cks 112 javascript jquery click onclick onclicklistener

码:

<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>
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用.当我点击#clicker时,它不会发出警报,也不会隐藏.我检查了控制台,没有错误.我还检查了JQuery是否正在加载,确实是.所以不确定问题是什么.我还做了一个带有警报的文件就绪功能,这样做不能确定我做错了什么.请帮忙.谢谢!

mob*_*ius 171

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

$(document).ready(function() {
  $("#clicker").click(function () {
    alert("Hello!");
    $(".hide_div").hide();
  });
});
Run Code Online (Sandbox Code Playgroud)

正如jQuery文档所述:"在文档准备就绪之前,页面无法安全地操作."jQuery会为您检测这种准备状态.内部包含的代码$( document ).ready()只有在页面文档对象模型(DOM)为JavaScript准备好后才会运行要执行的代码"

  • 我真傻!! 还在学习.我认为我点击功能不需要一个,因为它在点击vs document.ready时被激活,它在页面加载时加载. (6认同)
  • @starbucks不要太担心,每个人都会犯错误,特别是在学习的时候:) (6认同)
  • 文档就绪函数根据它在页面上找到的内容设置监听器.如果你不这样做,他们永远不会被设置.但是,执行此操作的最佳方法是使用"on()"函数委派它们.这样,在*load之后添加到页面*的任何元素仍然可以工作! (3认同)
  • @SeanKendle-那不是.on()的工作原理。您可以(可选)使用它来创建委托处理程序,但是无论哪种方式,它都不会“抓取页面”,它将侦听器绑定到您调用它的jQuery对象中的特定元素。 (2认同)

use*_*597 54

通过使用带$(文档)的ON,我找到了解决此问题的最佳解决方案.

 $(document).on('click', '#yourid', function() { alert("hello"); });
Run Code Online (Sandbox Code Playgroud)

对于id开始,见下文:

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

终于在1周后我不需要添加onclick triger.我希望这会对很多人有所帮助

  • 它被称为委托,是动态插入或移动内容所必需的 (3认同)
  • 啊,谢谢,以上对我不起作用,但这样做了!(可能与角度和路由有一些奇怪的交互) (2认同)

Sai*_*akR 19

您的代码可以在没有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>
Run Code Online (Sandbox Code Playgroud)

  • +1 - 您的答案解释了为什么需要`document.ready()`函数. (10认同)

Bla*_*eep 6

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

JS代码:

$(document).ready(function() {

    $("#clicker").click(function () {
        alert("Hello!");
        $(".hide_div").hide();    
    });
});
Run Code Online (Sandbox Code Playgroud)


tjo*_*ons 5

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