Event.observe未在IE中触发

时间:2014-03-04 16:11:04

标签: internet-explorer prototypejs

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"]是我拥有所有东西的全局对象。 :d

更新: 我尝试在函数或观察者周围放置简单的alert(),但它不起作用。还尝试了click事件 - 没有成功......

我很少做前端开发,但是在我今天挣扎之后,我知道IE为何如此讨厌。

2 个答案:

答案 0 :(得分:1)

这是一个丑陋的解决方案,因为你正在使用prototype.js,但你仍然可以尝试使用替代方法(如果你没有找到其他解决方案) - 使用jQuery绑定一个observe事件:

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

答案 1 :(得分:1)

在Prototype中,上面的内容将是

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

我怀疑还有一种更简单的方法来构建这个页面,这样对象就可以拥有他们需要的所有数据,而且你不需要在DOM中挂出这个“上帝对象”。