2011-10-18 76 views
0

工作,我有inputUL監聽器onchange事件不能在IE

<ul id="list"> 
    <li><input type="text" /></li> 
    <li><input type="text" /></li> 
    <li><input type="text" /></li> 
    <li><input type="text" /></li> 
</ul> 

原因的名單裏有很多人,我讓ul做事件委派:

function addHandler(element, type, handler) { 
    if (element.addEventListener) { 
     element.addEventListener(type, handler, false); 
    } else if (element.attachEvent) { 
     element.attachEvent("on" + type, handler); 
    } else { 
     element["on" + type] = handler; 
    } 
} 
addHandler(document.getElementById("list"), "change", function(event) { 
    event = event || window.event; 
    var target = event.target || event.srcElement; 
    if (target.nodeName === "INPUT") { 
     alert(target.value); 
    } 
}); 

這在Chrome,Firefox中運行良好,但在IE中不行,有什麼問題?
小提琴:http://jsfiddle.net/94ngc/

回答

1

的問題是,change事件是越野車在IE < 9看一看這張圖:

http://www.quirksmode.org/dom/events/change.html

正如你所看到的,在變化事件適用於所有瀏覽器,但IE瀏覽器只觸發它在輸入元素(我認爲它只是不正確的泡沫,或它不可用於其他元素)。

試試這個作爲測試,它應該在IE瀏覽器的拳頭輸入工作:

var inp = document.getElementById("list").firstChild.firstChild; 
addHandler(inp, "change", function(event) { 
    event = event || window.event; 
    var target = event.target || event.srcElement; 
    if (target.nodeName === "INPUT") { 
     alert(target.value); 
    } 
}); 

我建議你通過所有的輸入迴路和聽衆重視每一個元素,而不是事件委託給UL的,或者使用像jQuery或YUI這樣的事件規範器。

注意:您的代碼似乎在IE9中正常工作+