ul слушатель события onchange не работает в IE - PullRequest
0 голосов
/ 18 октября 2011

У меня есть список input

<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 Ответ

1 голос
/ 18 октября 2011

Проблема в том, что событие change содержит ошибку в IE <9.Посмотрите на этот график: </p>

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 +

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...