Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正确绑定javascript事件_Javascript_Javascript Events - Fatal编程技术网

正确绑定javascript事件

正确绑定javascript事件,javascript,javascript-events,Javascript,Javascript Events,我正在寻找绑定javascript事件的最合适、最有效的方法;特别是onload事件(我希望事件发生在页面和所有元素(如图像)加载之后)。我知道在jQuery中有一些简单的方法可以做到这一点,但我希望使用效率更高的原始javascript方法。有两种不同的方法。只有一个会起作用;哪一个取决于浏览器。下面是一个实用方法,它同时使用以下两种方法: window.onload = function() { // ... }; function bindEvent(element, type,

我正在寻找绑定javascript事件的最合适、最有效的方法;特别是onload事件(我希望事件发生在页面和所有元素(如图像)加载之后)。我知道在jQuery中有一些简单的方法可以做到这一点,但我希望使用效率更高的原始javascript方法。

有两种不同的方法。只有一个会起作用;哪一个取决于浏览器。下面是一个实用方法,它同时使用以下两种方法:

window.onload = function() {
   // ...
};
function bindEvent(element, type, handler) {
   if(element.addEventListener) {
      element.addEventListener(type, handler, false);
   } else {
      element.attachEvent('on'+type, handler);
   }
}
就你而言:

bindEvent(window, 'load', function() {
    // all elements such as images are loaded here
});

我知道你只问过如何绑定事件。但好家伙,乐趣还不止于此。要获得正确的跨浏览器,不仅仅是初始绑定,还有很多事情要做

@d、 对于要查找的
window
load
事件的特定情况,的答案就足够了。但它可能会让代码的新手读者产生一种错误的感觉,即“做对了”。仅仅因为你绑定了事件并不意味着你注意到了它的正常化。您最好只修复
窗口。onload

window.onload = (function(onload) {
  return function(event) {
    onload && onload(event);

    // now do your thing here
  }
}(window.onload))
但是对于事件绑定的一般情况,@d.的答案远远不能令人满意,甚至令人沮丧。它唯一正确的做法是使用特征检测,而不是浏览器检测

我不想在这里说太多,但是JavaScript事件绑定可能是使用JavaScript库的首要原因。我不管是哪一个,其他人已经一次又一次地解决了这个问题。以下是在处理程序函数中使用自制实现时的问题:

  • 如何获取
    事件
    对象本身
  • 如何防止事件的默认操作(例如单击链接但不导航)
  • 为什么
    始终指向
    窗口
    对象
  • (重新鼠标事件)事件的x/y坐标是什么
  • 哪个鼠标按钮触发了事件
  • 是按Ctrl键还是按常规键
  • 事件实际上是在什么元素上触发的
  • 这项活动将涉及哪些要素?(即
    relatedTarget
    ,表示
    blur
  • 如何通过其父DOM取消事件的冒泡
  • (重新事件冒泡)现在实际接收事件的元素是什么?(即当前目标)
  • 为什么我不能从这个
    keydown
    事件中获取异常的字符代码
  • 当我添加所有这些事件处理程序时,为什么我的页面会泄漏内存??啊
  • 为什么我不能解除我先前绑定的匿名函数的绑定
而且这个名单还在继续

在这些日子里,你自己动手的唯一好理由就是学习。那很好。尽管如此,还是要读PPK的。看这张照片。看这张照片。你不会后悔的。

类似的事情

window.onload = (function(onload) {
    return function(event) {
        onload && onload(event);

        $(".loading-overlay .spinner").fadeOut(300),
            $(".loading-overlay").fadeOut(300);
            $("body").css({
                overflow: "auto",
                height: "auto",
                position: "relative"
            })
    }
}(window.onload));

非常感谢你。非常彻底,正是我要找的@杰基:乐趣还不止于此。请看我的答案。事件本身是一种依赖关系,在很大程度上可以通过理解DOM来避免。DOM以从上到下的方式加载;越靠近文档顶部的项目加载越早,而越靠近文档末尾的项目加载越晚。通过在文档末尾加载具有DOM依赖关系的脚本,这些问题中的许多都可以在没有任何事件绑定的情况下得到缓解。保持简单。@KingRider:哪个浏览器和版本?@DavidHedlund win 10 to Internet Explorer的最新版本有些情况下,加载库或框架是不切实际的,并且由于各种原因(早期加载与晚期加载,js对于“简单功能”的膨胀,…)而过度使用。