这是我的js文件内容:
window.onload = function() {
obj = document.getElementById("_accountwebsite_id");
Event.observe(obj, 'change', function () {
alert('hi');
});
}
我想为我的下拉列表触发更改事件:_accountwebsite_id
。它在此文件之前加载的原型库。我在控制台中没有出错。我哪里错了? thx
答案 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的元素上的任何更改事件,即使它是在观察者向文档注册后添加的。