Показать сообщение отдельно
  #8 (permalink)  
Старый 03.06.2012, 20:35
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Vit
А почему?
Потому что когда Вы каждый раз пишете el.onclick = function(){ ..., Вы каждый раз убиваете котёнка создаёте новую функцию. А делая, как я показал, Вы используете одну каждый раз.

Сообщение от devote
да я только что проверил в локалке.. ИЕ6 в попе, остальные норм.
Я не пишу под него, как и под FF 3.6. Я в стаде .

Сообщение от Vit
И как правильно описать handler(), дабы он входил в состав объекта, и видел OnOk и OnFail?
Самое простое - записать их в объект какой-нибудь, а его уже сохранить в замыкании.
http://jsfiddle.net/yPKkJ/2/
Боялся, что IE не понравится custom свойство id ... но, вроде, пережевал.
(function() {

    var running = {};

    function noop() {}

    function handler() {
        if (this.readyState === 4) {
            (running[this.id][this.status === 200 ? "onsuccess" : "onerror"] || noop).call(this);
            delete running[this.id]; // убиваем сами обработчиков. не нужны уже.
        }
    }

    window.send = function(url, method, data, onsuccess, onerror) {
        var req = new XMLHttpRequest();
        req.open(method, url, true);
        req.onreadystatechange = handler;
        req.send(data);
        req.id = (Math.random() * 1e5 | 0).toString(32); // случайна последовательность англ. букв и цифр. 
        running[req.id] = { // сохраняем, пока не понадобятся
            "onsuccess": onsuccess,
            "onerror": onerror
        };
    }
})();

Последний раз редактировалось melky, 03.06.2012 в 20:39.
Ответить с цитированием