【问题标题】:Event.observe not triggered in IEEvent.observe 未在 IE 中触发
【发布时间】:2014-04-06 07:02:05
【问题描述】:
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 被这么讨厌了。

【问题讨论】:

  • 可以发一下相关的HTML吗?
  • @MaxiWheat - 我更新了我的答案。 :) 这就是生成 HTML 的函数。
  • 哪个版本的 PrototypeJS? - 最近的公开版本是 1.7.1 - 页面上是否存在多个具有相同 id 的元素?
  • 您可能希望通过此操作并将所有document.getElementById 实例替换为$,因为前者不返回扩展元素(即:添加了所有原型扩展的元素到它)在 IE 中。只有使用 Prototype “getter”之一($()$$()Element.extend()),您才能获得包含所有额外 Prototype 糖的对象。
  • @Walter - 好的,我明白你的意思了。但问题是我什至没有进入被调用的getSkuOfProductBySize 函数......

标签: internet-explorer prototypejs


【解决方案1】:

在原型中,上面是

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      • 2014-11-29
      • 2015-05-29
      • 1970-01-01
      相关资源
      最近更新 更多