Event.observe не се задейства в IE

Event.observe(
    'size_list',
    'change',
    itemOptions["_hiddenSkuField"].getSkuOfProductBySize
);

size_list е падащ списък с някои опции. И така, това трябва да извика функция, която ще генерира някакъв HTML, но това не се случва. Излишно е да казвам, че работи перфектно в Chrome и Firefox.

Не виждам какъв е проблемът, не въвеждам myFoo или дори горния .observe код, когато се опитвам да отстранявам грешки.

getSkuOfProductBySize: function() {
        document.getElementById('product-type').value = '';
        document.getElementById('sku_hidden').value = '';
        var selectedIndex = document.getElementById('dropdown_options').value;
        for (var i=0; i<itemOptions["_hiddenSkuField"].products.length; i++) {
            if (itemOptions["_hiddenSkuField"].products[i].size == selectedIndex) {
                document.getElementById('sku_hidden').value = itemOptions["_hiddenSkuField"].products[i].sku;
                itemOptions["_hiddenSkuField"].backupResponse = itemOptions["_hiddenSkuField"].products[i];
                itemOptions["_hiddenSkuField"].callShowHtmlOfButtons(itemOptions["_hiddenSkuField"].products[i]);
                return;
            }
        };
    }

itemOptions["_hiddenSkuField"] е глобалният обект, който притежавам всички неща. :Д

АКТУАЛИЗАЦИЯ: Опитах се да поставя просто alert() около функцията или наблюдателя и не работи. Опитах и ​​със събитие click - без успех...

Занимавам се с front-end разработка много рядко, но след борбите ми с него днес, знам защо IE е мразен толкова много.


person Syspect    schedule 04.03.2014    source източник
comment
Можете ли да публикувате HTML свързано с това?   -  person MaxiWheat    schedule 04.03.2014
comment
@MaxiWheat - актуализирах отговора си. :) Това е функцията, която ще служи за генериране на HTML.   -  person Syspect    schedule 04.03.2014
comment
коя версия на PrototypeJS? - най-новата публична версия е 1.7.1 - Има ли няколко елемента на страницата с еднакъв идентификатор?   -  person Geek Num 88    schedule 04.03.2014
comment
Може да искате да преминете през това и да замените всички ваши document.getElementById екземпляри с $, тъй като първото не връща разширен елемент (т.е.: елемент с всички разширения на прототипа, добавени към него) в IE. Само като използвате един от инструментите за получаване на прототипи ($() или $$() или Element.extend()), ще получите обект, който съдържа цялата допълнителна захар на прототипа.   -  person Walter    schedule 04.03.2014
comment
@Walter - Добре, разбирам мисълта ти. Но проблемът е, че дори не влизам в извиканата функция getSkuOfProductBySize...   -  person Syspect    schedule 05.03.2014
comment
Трябва да видя повече контекст тук -- дали сте вътре в обратно извикване на document.observe('dom:loaded', …) или сте в долната част на страницата, така че този елемент (size_list) вече е зареден в DOM за намиране? Фактът, че дори не извиквате функцията си, е важен. Не забравяйте, че Event.observe е анонимно затваряне, то може да действа само върху нещата, които съществуват в момента, в който е затворено (освен ако не предоставите метод за намиране в него, така че може да действа мързеливо).   -  person Walter    schedule 07.03.2014


Отговори (2)


Това е малко грозно решение, тъй като използвате prototype.js, но все пак можете да опитате с алтернатива (ако не намерите друго решение) - обвързване на събитие за наблюдение с jQuery:

$('#dropdown_options').bind('change', function(){
        itemOptions["_hiddenSkuField"].getSkuOfProductBySize();
});
person Milkncookiez    schedule 05.03.2014

В прототипа горното би било

$('size_list').observe('change', function(evt){
  itemOptions['_hiddenSkuField'].getSkuOfProductBySize();
});

Подозирам също, че има много по-прост начин за архитектура на тази страница, така че обектите сами да имат всички необходими данни и няма да имате нужда от този „божествен обект“, който виси в DOM.

person Walter    schedule 07.03.2014