【问题标题】:jQuery event handler not working if not in the onLoad function如果不在 onLoad 函数中,jQuery 事件处理程序将不起作用
【发布时间】:2016-02-14 15:16:37
【问题描述】:

我有这个脚本:

<script>
    window.onload = function() {
        setTimeout(function() {
            $($('div')).css('background-color', 'yellow')
        }, 3000)

        $('div').eq(0).draggable()      
        $('p').click(function() { 
            $(this).css('background-color', 'gray') 
        })
        $('p').click(function() { /* *** */
            console.log($(this).offset()) 
        })   
    }
</script>

如果我将标记为*** 的行移到下面,而不是在要调用的onLoad 函数内,它就不再起作用了。

文档加载后如何调用 jQuery 代码? (完整示例页面:http://pastebin.com/6zHipk4i

【问题讨论】:

  • $(document).ready(function() { ... });
  • 你为什么要移动它?
  • 假装它是:$('p').click(function() { $(this).css('background-color', 'red') } ) /* *** */ 如果你不喜欢它移动
  • 你不需要双重包装这个元素:$($('div')) 改用这个:$('div')
  • 我之前有更多 div s.. 我没有删除它,谢谢

标签: javascript jquery events handler


【解决方案1】:

onload fires as soon as an object has been loaded,而 jQuery 的 ready() 在检测到所有资源都已加载时触发。 如果您愿意,可以在正文上使用unload,以便在页面完全加载时执行。但是,如果您使用 jQuery,最好使用 jQuery 方式:

$(document).ready(function(){
    $('p').click(function() { console.log($(this).offset()) } );
});

或者你有时会看到同样的写法:

$(function(){
     $('p').click(function() { console.log($(this).offset()) } );
});

【讨论】:

  • 如果您使用 jQuery,请使用 jQuery 方式。直接设置onload是自找麻烦。
  • @developius 我完全理解这一点,但答案并没有反映出任何一点。 OP 可能会误解并将onload 放入您拥有//code here 的位置,并且不会产生理想的影响。答案缺乏适当的解释
  • 现在您对onload 的解释是完全错误的。它实际上会在 就绪事件之后触发
  • 不得不投反对票。 unload 概念比原来的描述更糟糕,更不正确
  • @charlietfl 从这个 JSFiddle 可以看出,jQuery 的 ready() 似乎在 onload 之前触发。 jsfiddle.net/h5vhLrmk/4
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多