Javascript jQuery应该只在ready事件处理程序中使用吗?

Javascript jQuery应该只在ready事件处理程序中使用吗?,javascript,jquery,Javascript,Jquery,我已经阅读了在ready处理程序之外使用jQuery的代码,这种方式的缺点是什么?不管出于什么原因,我对这种编码方式感到不舒服 来自和ASP.NET MVC视图的内联脚本: <script type="text/javascript"> function foo() { if ($("#checkAll").attr("checked")) { $(".setColumns").attr("checked", true);

我已经阅读了在ready处理程序之外使用jQuery的代码,这种方式的缺点是什么?不管出于什么原因,我对这种编码方式感到不舒服

来自和ASP.NET MVC视图的内联脚本:

<script type="text/javascript">
    function foo() {
        if ($("#checkAll").attr("checked")) {
            $(".setColumns").attr("checked", true);
        }
        else {
            $(".setColumns").attr("checked", false);
        }

    }
</script>

函数foo(){
if($(“#checkAll”).attr(“checked”)){
$(“.setColumns”).attr(“选中”,为真);
}
否则{
$(“.setColumns”).attr(“选中”,false);
}
}
它不是。 有些人在
document.ready
处理程序中运行它的唯一原因是,在那时,他们可以确保
DOM树
已完全加载,并且您的查询将返回正确的结果

但是,如果将脚本标记放在所有元素下面,通常不会有任何问题。

不是这样。 有些人在
document.ready
处理程序中运行它的唯一原因是,在那时,他们可以确保
DOM树
已完全加载,并且您的查询将返回正确的结果


但是,如果将脚本标记放在所有元素下面,通常不会有任何问题。

实际上没有任何缺点。只是您需要等待DOM元素加载后才能对其进行操作。例如,如果您有这样的代码:

<script type="text/javascript">
  console.log($('#el').html());
</script>

<div id="el">Text</div>

log($('#el').html());
文本

函数不会返回值,因为尚未加载
div

实际上没有任何缺点。只是您需要等待DOM元素加载后才能对其进行操作。例如,如果您有这样的代码:

<script type="text/javascript">
  console.log($('#el').html());
</script>

<div id="el">Text</div>

log($('#el').html());
文本

函数将不会返回值,因为尚未加载
div

在DOM就绪处理程序中使用jQuery的原因是事件绑定仅在元素存在时才起作用-如果DOM未就绪,则元素可能不存在,因此事件可能不会绑定

例如,在尝试将事件绑定到动态加载的内容时,如果不使用
.on()
选择器,人们也会遇到同样的问题-如果元素最初不存在,事件将不会绑定到它


p/s:您当然可以在处理程序之外定义函数。

在DOM就绪处理程序中使用jQuery的原因是,事件绑定仅在元素存在时才起作用-如果您的DOM未就绪,则元素可能不存在,因此事件可能未绑定

例如,在尝试将事件绑定到动态加载的内容时,如果不使用
.on()
选择器,人们也会遇到同样的问题-如果元素最初不存在,事件将不会绑定到它


p/s:您当然可以在处理程序之外定义函数。

在DOM就绪处理程序中使用jQuery的原因是,事件绑定仅在元素存在时才起作用-如果您的DOM未就绪,则元素可能不存在,因此事件可能不会被绑定。当然,您可以在处理程序之外自由定义函数。任何元素操作。不仅仅是事件绑定。元素必须先存在,然后才能进行操作。只要您的
foo
函数保证在触发DOMReady后被调用,您的代码完全没有问题。我会觉得不舒服,因为在DOM就绪处理程序中添加函数。在DOM就绪处理程序中使用jQuery的原因是,只有当元素存在时,事件绑定才会起作用-如果您的DOM未就绪,您的元素可能不存在,因此事件可能不会被绑定。当然,您可以在处理程序之外自由定义函数。任何元素操作。不仅仅是事件绑定。元素必须先存在,然后才能进行操作。只要您的
foo
函数保证在触发DOMReady后被调用,你的代码一点问题都没有。我会觉得在全局范围内添加函数不舒服。概念的很好说明:)你打败了我们呵呵。概念的很好说明:)你打败了我们呵呵。我希望你先把答案和注释一起发布。我希望你先把答案和注释一起发布议论