jQuery语句必须放在$(function());里面吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jQuery语句必须放在$(function());里面吗相关的知识,希望对你有一定的参考价值。

发现写个jQuery放在其它里面就是没有反应,必须放在$(function()):里面才会起作用,或者其他地方的jQuery必须被$(function()):调用,难道其他地方不行?

不是必须的。

$(function()
//TODO:这里的内容表示js只有在DOM元素全部加载结束后才会执行
);

如上面注释中说明的,js在浏览器渲染页面时是按照在文档中出现的顺序来顺序执行的。因此如果js文件在<header>部分引入,那么文件中的js代码会在dom元素渲染完毕前就执行。假设js代码中有类似$('#elementId').click(function()...);这样的语句,那么就会因为dom没有渲染完,导致根本找不到elementId这个对象,从而导致事件绑定失败。

但是,如果我们把js的内容放到$(function()...);里面,这里面的代码会等到文档内容全部渲染完毕才执行。事件就能够成功绑定了。

所以我们一般在写代码时,通常会注意两点

1、借用$(function());包括js内容

2、将需要引入的js文件放在dom的底部引入

<html>
    <head>
        ....
    </head>
    <body>
        <div>...</div>
        <div>...</div>
        <script src="/script/test.js">
    </body>
</html>

参考技术A $(function())是代表什么意思你知道吗?它是代表页面加载完的时间...就相当于你在body定义onload事件....写在其他地方是可以的....只是我们习惯在加载后注册jQuery事件....你写的外面就要考虑它的加载顺序了..如果写在里面是不需要的...因为它会等到页面加载完毕才去运行的.... 参考技术B $(function())的标准写法现在是$(document).ready(function());他跟onload还是有不同的,当DOM载入就绪可以查询及操纵时就会执行里面的语句,而onload要所有的元素(图片,视频等)都载入才执行。你的jquery语句可以放在任何地方执行,当然之前你要先装载jquery库文件 参考技术C 你是怎么写的?不一定要放在$(function())里面的啊

jQuery - 悬停和if语句

我正在尝试运行悬停,但仅当给定元素具有某个类时。

例如:

jQuery的

$("#banner").hover(
  if ($(this).hasClass("bannerReady")) {
  function() {
    runOne();
  },
    function() {
      runTwo();
    }
}
);

但这不起作用。

我已经尝试过这样使用它,这会起作用,但是jQuery不会意识到同时更改了类名,它仍将继续工作:

if ($(this).hasClass("bannerReady")) {
  $("#banner").hover(

    function() {
      runOne();
    },
      function() {
        runTwo();
      }
  );
}
答案

.hover()希望收到两个函数,所以你不能将if语句传递给它。像这样改变它:

$("#banner").hover( function() {
      if ( $("#banner").hasClass("bannerReady") ) runOne();
  }, function() {
      runTwo();
  }
});
另一答案

hover()只是一个添加mouseentermouseleave处理程序的包装方法。

https://api.jquery.com/hover/

委托允许我们将事件附加到页面上当前不存在的选择器。

https://learn.jquery.com/events/event-delegation/

$('body').on('mouseenter', '#banner.bannerReady', runOne);
$('body').on('mouseleave', '#banner.bannerReady', runTwo);

通过将事件附加到正文(始终存在)并让它委托给#banner.bannerReady选择器,您可以在页面加载的第二个事件中附加事件,并仅在横幅实际匹配选择器时运行它们。

如果横幅所在的选择器更具体,则可以使用该选择器代替body

以上是关于jQuery语句必须放在$(function());里面吗的主要内容,如果未能解决你的问题,请参考以下文章

为啥我必须将所有脚本放在 jquery mobile 中的 index.html 中

javascript

jquery局部变量和全局变量的错误

switch结构case语句后的多个语句必须放在花括号中。 这句话对吗?为啥?

jQuery - 悬停和if语句

jquery里ajax中怎么将函数中的数据提取出来,放在另外一个其他函数中使用?