Antiless
@Antiless

Почему странно работает js в firefox?

Есть примерно такой код:
<select id="free_size" name="free_size">...</select>

/* этот код идет сразу после элемента выше*/
jQuery('#free_size').change(function () {
    ...
});
...
/*этот код подключается в футере через внешний файл*/
jQuery(window).load(function() {
            ...
            setTimeout(function() {
                ... 
                /*$ это prototypeJs; вообще, скриптов различных много (магазин), но не думаю, что это очень важно*/
                $('free_size').triggerEvent('change');
                ...
            }, 2900);
}
...
Element.prototype.triggerEvent = function(eventName)
{
    if (document.createEvent)
    {
        var evt = document.createEvent('HTMLEvents');
        evt.initEvent(eventName, true, true);
        return this.dispatchEvent(evt);
    }

    if (this.fireEvent)
        return this.fireEvent('on' + eventName);
};

Он хорошо работает в хроме/хромиуме/эксплорере, но не работает в огнелисе. Конкретно, нет реакции на диспатч. Однако, если добавить alert перед диспатчем ИЛИ брейкпоинт в отладчике поставить на него, то все хорошо срабатывает и работает как надо. Предполагаю, что привязка события к элементу просто не успевает инициализироваться, но в других же браузерах все хорошо.
Буду очень рад, если кто-нибудь объяснит эту магию :-)
  • Вопрос задан
  • 256 просмотров
Пригласить эксперта
Ответы на вопрос 2
IonDen
@IonDen
JavaScript developer. IonDen.com
Если у вас подключен jQuery, то все что вам нужно сделать это $('free_size').trigger('change');
Дальше всю кроссбраузерность возьмет на себя jQuery.
Ответ написан
trushka
@trushka
Думаю, что проблема кк раз в том, что "$ это prototypeJs"
То есть, либо jQuery вместо $ везде писать, либо оборачивать весь jQuery код в (function($){...})(jQuery)
Ещё можно попробовать обратно присвоить $=jQuery, если это не поломает код, использующий prototypeJs
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы