Javascript 是否添加第二个onChange事件?

Javascript 是否添加第二个onChange事件?,javascript,onchange,Javascript,Onchange,您好,我在网上找到了这个脚本,它向元素添加了一个onChange事件,现在我想向同一元素添加第二个onChange事件。下面是脚本: document.getElementById('piname').onchange = function() { removeChildren({ parentId: 'account_table', childName: 'extraaccount' }); } 我想添加的onChange事件是: showAc

您好,我在网上找到了这个脚本,它向元素添加了一个onChange事件,现在我想向同一元素添加第二个onChange事件。下面是脚本:

document.getElementById('piname').onchange =
function() {
    removeChildren({
        parentId: 'account_table',
        childName: 'extraaccount'
    });
}
我想添加的onChange事件是:

showAccount(this.value)
使用
addEventListener()
(和
attachEvent
作为后备方案,如果需要)。
例如:

例如,使用回退:

var element = document.getElementById('piname');
if(element.addEventListener){
  element.addEventListener("change", function(e){
    e = e || event;
    showAccount(e.target.value);
  }, false);
}
else if(element.attachEvent){
  element.attachEvent("onchange", function(e){
    e = e || event;
    showAccount(e.target.value);
  });
}

最简单的方法是缓存旧函数并从新函数调用它:

var el = document.getElementById('piname'),
    old = el.onchange;

el.onchange = function () {
    old.call(el);
    showAccount(this.value);
}
除此之外,您可以使用
addEventListener
(W3C标准)和
attachEvent
(IE8及更低版本):


这些方法允许您将任意多个处理程序附加到事件。

通过将
getElementById
的结果存储在变量中,减少元素查找。另外,
已正确绑定到
addEventListener
的元素。Hmm@Andy@Digital im收到以下错误…
未捕获异常:[异常…“参数不足”nsresult:“0x80570001(NS错误\u XPC\u参数不足)”位置:“JS frame
@Jonah,添加
false
作为
addEventListener
中的最后一个参数。FireFox对此抱怨,Chrome和Safari没有。@Zanfa:是的,这在FireFox 5之前都是正确的,包括FireFox 5。它在Fx 6中是可选的。@Jonah使用第二个示例,它有一个使用附件的IE的备用项。你能解释一下旧的.call(el)吗?”编辑:nvm
var el = document.getElementById('piname'),
    old = el.onchange;

el.onchange = function () {
    old.call(el);
    showAccount(this.value);
}
var el = document.getElementById('piname'),
    fn = function (e) {
         e = e || window.event;
         showAccount((e.target || e.srcElement).value); 
    };

if ("addEventListener" in el) {
    el.addEventListener("change", fn, false);
}
else {
    el.attachEvent("onchange", fn);
}