Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   очередь событий прерывается alertом (https://javascript.ru/forum/events/10681-ochered-sobytijj-preryvaetsya-alertom.html)

puchu 15.07.2010 13:39

очередь событий прерывается alertом
 
на iframe привязываю 2 события load и ready (так нужно чтобы кросбраузерно палить когда засабмитится форма в iframe)

так вот я расчитывал на то что эти события в нормальных браузерах выполниться 2 раза а в ие 1 раз (в ие не работает load)

все отлично было пока я не вставил в функцию alert
1) выполняется load
2) вызывается alert
3) очередь событий прерывается!
4) ready не вызывается!

как захачить?

puchu 15.07.2010 13:47

0_0 что интересно это как когда происходит!
иногда все норм а иногда очередь сбивается!!!

ЗЫ опера
ЗЫЗЫ отправил опере на баг трекер. но если кто знает как этот баг фиксится - сразу говорите. я покуда вставил в код костыль if($.browser.opera)...

x-yuri 15.07.2010 17:33

нужно палить, когда в iframe загрузиться страничка (в смысле есть же onsubmit формы)?
форма сабмитится всегда, но не всегда возникает событие?
и расскажи подробнее, что у тебя происходит (что за форма, почему в iframe сабмитится), может получиться придумать другое решение

puchu 15.07.2010 17:42

я искал аплоадер плана: гугли в сторону ajax loader
но все что я нашел не кроссбраузерно!
поэтому я написал свой

задача состояла в том чтобы узнать когда загрузиться файл чтобы рефрешнуть фрейм
я эту задачу уже решил для 5 браузеров таким хитрющим методом:

код рекурсивен

function getContentsAndReload() {
                    if($.browser.msie || $.browser.opera || $.browser.safari) {
                        endLoading = (loadIndex > 0);
                    } else {
                        endLoading = (loadIndex > 1);
                    }
                    if(endLoading) {
                        //...
                    } else {
                        loadIndex++;
                    }
                }

                var loadIndex = 0;
                if($.browser.opera) {
                    $(iframe).load(getContentsAndReload);
                } else {
                    $(iframe).ready(getContentsAndReload);
                    $(iframe).load(getContentsAndReload);
                }


как видим сплошные костыли но работает кроссбраузерно опера мазила ие сафари гугл хром
так что если можеш предложить лучшее решение - фперед

puchu 15.07.2010 17:44

и не в коем случае не предлагай мне метод который стоит на таймауте и проверяет фрейм - эта ваще гавно, хоть и кроссбраузерное

e1f 15.07.2010 18:17

Цитата:

Сообщение от puchu (Сообщение 63934)
и не в коем случае не предлагай мне метод который стоит на таймауте и проверяет фрейм - эта ваще гавно, хоть и кроссбраузерное

Поэтому Вы сделали свое го*но, некроссбраузерное?

puchu 15.07.2010 20:37

тратить лишнее процессорное время на такое глупо
если можно сделать нормальную надежную реализацию без этого

*Поэтому Вы сделали свое го*но, некроссбраузерное?
если ты пришол сюда сказать какие все говно а ты один умный - ты пришол не по адресу

x-yuri 15.07.2010 21:45

как насчет такого варианта? Или объясни нормально, как эти события работают в разных браузерах
var onLoadHandler = onLoad.executeOnce();
$(iframe).ready(onLoadHandler); 
$(iframe).load(onLoadHandler);

Function.prototype.executeOnce = function(){
    var f = this;
    return function(){
        if( arguments.callee._executed )
            return;
        var r = f.apply(this, arguments);
        arguments.callee._executed = true;
        return r;
    }
};


p.s. когда ты называешь решение, без которого бывает не обойтись (насколько я знаю) говном, а сам предлагаешь хитрющий метод, который кроме всего прочего использует browser detection... ты ждешь, что его назовут как-то по-другому?

Цитата:

Сообщение от puchu
тратить лишнее процессорное время на такое глупо
если можно сделать нормальную надежную реализацию без этого

если можно сделать нормальную надежную реализацию, то лучше обойтись без setTimeout. Но лучше уж setTimeout, чем browser detection. И ты мерял, сколько там этого времени тратится (тем более, что это отправка формы, а не какой-нибудь ajax suggest)?

Panzermaus 16.07.2010 00:54

Цитата:

Сообщение от puchu (Сообщение 63887)
все отлично было пока я не вставил в функцию alert

Прям сегодня написано: alert() и события - дело темное.

Оказывается, у И. Кантора тоже об этом есть. Эм-м, видимо нет такой темы, о которой бы у него ни слова не было :)


Часовой пояс GMT +3, время: 23:07.