更改事件问题的原型火灾

时间:2016-11-21 13:21:21

标签: javascript prototypejs

这是我的js文件内容:

window.onload = function() {
    obj = document.getElementById("_accountwebsite_id");
    Event.observe(obj, 'change', function () {
        alert('hi');
    });
}

我想为我的下拉列表触发更改事件:_accountwebsite_id。它在此文件之前加载的原型库。我在控制台中没有出错。我哪里错了? thx

1 个答案:

答案 0 :(得分:1)

你在Prototype为你做了很多额外的工作。首先,设置文档的onload方法不仅非常老派,它还会破坏之前设置的观察者。

$(document).observe('dom:loaded', function( ... ){...});

...是将一个(或多个)事件侦听器注册到文档加载事件的现代方法。

接下来,您在这里使用getElementById,这将起作用,但在某些浏览器中不会返回Prototype扩展对象。

$('element-id'); 

...如果你的浏览器不能尊重原型继承的每个方面,它们都将获得元素引用并扩展它。

最后,通过使用延迟观察者,可以使整个事情更简单,更安全。想象一下,如果你的接口DOM是由Ajax更新的 - 这将使你的观察者错过这个select元素触发的事件,因为它没有引用相同的(===)元素,即使ID匹配。

$(document).on('change', '#_accountwebsite_id', function(evt, elm){
  alert(elm.inspect());
});

此观察者将响应具有正确ID的元素上的任何更改事件,即使它是在观察者向文档注册后添加的。