ui event

13.4.1 UI事件

load事件:最常用的一个事件,当页面加载完成后(包括所有image、javascript文件、CSS文件等外部资源),就会触发windows上面的load事件。

第一种定义onload事件处理程序的方式:

EventUtil.addHandler(window, "load", function(event) {
    alert("loaded!");
});

第二种方式是:

<body onload="alert('loaded!')"></body>

但是尽可能的使用javascript方式。根据”DOM2级事件”规范,应该在document而非window上面触发load事件。但是,所有路南器都在window上面实现了该事件,以确保向后兼容。

图像上面也可以触发load事件,例如:

<img src="smile.gif" onload="alert('Image loaded.')">

也可以使用javascript来实现,例如:

var image = document.getElementById("myImage");
EventUtil.addHandler(image, "load", function(event) {
    event = EventUtil.getEvent(event);
    alert(EventUtil.getTarget(event).src);
});

在创建新的元素时,可以为其制定一个事件处理程序,以便图像加载完毕后给出提示。此时,最重要的是要在制定src属性之前先指定事件,例子:

//首先为window指定了onload事件处理程序,因为要添加一个新元素,必须确定页面已经加载完毕---在页面加载前操作document.body会导致错误。
EventUtil.addHandler(window, "load", function() {  
    var image = document.createElement("img");
    EventUtil.addHandler(image, "load", function(event) {
        event = EventUtil.getEvent(event);
        alert(EventUtil.getTarget(event).src);
    });
    document.body.appendChild(image);
    image.src = "smile.gif";
});

在DOM出现之前,开发人员经常使用Image对象在客户端预先加载图像。可以像使用元素一样使用Image对象,只不过无法添加到DOM树中。例子:

EventUtil.addHandler(window, "load" , function() {
    var image = new Image();    //使用Image构造函数创建了一个新图像的实例
    EventUtil.addHandler(image, "load", function(event) {
        alert("Image loaded!");
    });
    image.src = "smile.gif";
});

在IE9+、Firefox、Opera、Chrome 和Safari 3+及更高版本中,

EventUtil.addHandler(window, "load", function(){
    var script = document.createElement("script");
    EventUtil.addHandler(script, "load", function(event){
        alert("Loaded");
    });
    script.src = "example.js";
    document.body.appendChild(script);
});

IE和Opera 还支持元素上的load事件,以便开发人员确定样式表是否加载完毕。例如:

EventUtil.addHandler(window, "load", function(){
    var link = document.createElement("link");
    link.type = "text/css";
    link.rel= "stylesheet";

    EventUtil.addHandler(link, "load", function(event){
        alert("css loaded");
    });
    link.href = "example.css";
    document.getElementsByTagName("head")[0].appendChild(link);
});
Written on March 28, 2018