【问题标题】:Why does onChange crash Internet Explorer 7?为什么 onChange 会导致 Internet Explorer 7 崩溃?
【发布时间】:2009-12-23 18:44:54
【问题描述】:

我们刚刚发布了一个在线商店。

在此页面上,选择框会使某些计算机上的 Internet Explorer 7 崩溃。从来没有在我的电脑上。 有人知道为什么吗?

直播链接:http://velour.se/collection/women/tops/eloise 更新:事实证明,我发布的第一个喜欢并没有崩溃。 但以下是:http://velour.se/collection/women/outerwear/irina

屏幕转储:http://skitch.com/jesperlind/nc4j2/tops-eloise-velour-ie7-bug

原版:

<select id="sizeDD" onchange="javascript:SizeChange(this);"></select>

//Internet Explorer problem.
function SizeChange(e){
    DrawAmountDD(GetAmountById(e.value));
}

这是我认为可能涉及的一些代码:

    function DrawAmountDD(maxAmount){
        /*var max = parseInt(maxAmount) > parseInt(maxShowAmount) ? maxShowAmount : maxAmount;
        var html = "";
        for(var i=1; i <= max; i++){
            html += "<option value='" + i + "'>" + i + "</option>";
        }
        $("#amountDD").html(html);*/

        var max = parseInt(maxAmount) > parseInt(maxShowAmount) ? maxShowAmount : maxAmount;
        var ddlAmount = document.getElementById("amountDD");
        ddlAmount.length=max;

        for(var a=1; a <= max; a++){
            ddlAmount.options[a-1].value = a;
            ddlAmount.options[a-1].text = a;
        }
    }

版本 2:

<select id="sizeDD"></select>
<select id="amountDD"></select>

<script type="text/javascript">
    var maxShowAmount = '5';
    var colorSizeArr =
      { "colSize":
        [
            { "color": "Black/Offwhite",
              "specificId": "2",
              "size": "XS",
              "amount": "1" }
        ]
      };

    colorSizeArr.colSize.push(
      { "color": "Black/Offwhite",
        "specificId": "13",
        "size": "S",
        "amount": "2" });

    $(document).ready(function () {
        var selectSizeDD = document.getElementById('sizeDD');
        selectSizeDD.onchange = function () { sizeChange(selectSizeDD); };
    });

    function sizeChange(e) {
        DrawAmountDD(GetAmountById(e.value));
    }

    function GetAmountById(specificId) {
        for (var i = 0; i < colorSizeArr.colSize.length; i++) {
            if (colorSizeArr.colSize[i].specificId == specificId) {
                return colorSizeArr.colSize[i].amount;
            }
        }
        return 1;
    }

    function DrawAmountDD(maxAmount) {
        var max = parseInt(maxAmount) > parseInt(maxShowAmount) ? maxShowAmount : maxAmount;
        var html = "";
        for (var i = 1; i <= max; i++) {
            html += "<option value='" + i + "'>" + i + "</option>";
        }
        $("#amountDD").html(html);

    }
</script>

更新

我还没有弄清楚 Internet Explorer 7 在某些计算机上崩溃的确切原因。无论如何,上面的代码与它没有任何关系。它要简单得多。单击只有一个选项的选择框时浏览器崩溃。像这样:

<select id="amountDD">
<option value="1">1</option>
</select>

我在此链接上找到了一些信息,其中说单个选项也应该具有选定的属性,但如果没有该属性,它似乎确实会崩溃。

http://www.akselvoll.net/2007/08/ie7-crashes-when-clicking-on-drop-down.html

【问题讨论】:

  • 你也可以发布“GetAmountById”功能吗?
  • 另外 - 你能解释一下你所说的崩溃是什么意思吗?您的屏幕截图显示了该站点,但没有显示错误。
  • 浏览器完全崩溃,但在我的机器上没有。
  • 我忘记发布网址了。如果有人在触摸大小和颜色选择框时 IE7 崩溃,请告诉我。需要更多线索。你可以在这里现场试用:velour.se/collection/women/tops/eloise
  • 所以除了你的机器之外,这在每台 XP 机器上都会死掉?您是否调试了 JS,为您使用的每个变量添加了警报等等?此外,正如 KevinP 所说,没有 maxShowAmountGetAmountById 的定义。最后,能否给出select里面的option标签?

标签: javascript internet-explorer-7 crash


【解决方案1】:

我希望您所说的“崩溃”是指“JavaScript 不起作用”,而不是“Internet Explorer 崩溃”。如果只是页面,通常可以通过点击状态栏中的“页面错误”来查看错误。
另外,尝试一些经典的 JavaScript 调试 - 一次注释掉函数的块,直到找到导致它崩溃的块,然后将其缩小到行。

【讨论】:

  • 我的意思是彻底崩溃。我在客户的笔记本电脑上看到过它。每次在他们的两台计算机上都会发生这种情况。我已经要求他们禁用所有插件和 enpty 缓存,但仍然如此。没有js错误。我已经在 ceveral 机器上尝试过 i alla broswers。我的 IE7 不会崩溃。只有客户。
【解决方案2】:

首先,您的标记中不需要javascript: 前缀。处理程序会期望它是 javascript 代码,我很惊讶任何浏览器实际上都会解析它。通常,您将其视为href 属性中的协议标记,即使这样也不是处理它的好方法。其次,该函数的参数是对 DOM 元素 (select) 的引用,它的 value 属性可能得到很好的支持,也可能没有得到很好的支持。 http://www.w3schools.com 有一个很好的 HTML/Javascript DOM 参考资料。请参阅那里的Select 参考。要获得您可能想做的值e.options[e.selectedIndex].value。第三,通过 javascript 添加处理程序可能会更好。

var select = document.getElementById( 'sizeDD' );
select.onchange = function() { sizeChange(select); };

或者因为我现在看到您正在使用 jQuery:

$('sizeDD').change( sizeChange );

【讨论】:

  • 我不太介意投反对票,但也许您可能想解释一下我做错了什么。当我犯错时,我总是乐于学习。
  • w3.org/TR/2000/WD-DOM-Level-1-20000929/… 请参阅value 属性。在这里测试它:jsbin.com/ecuni。 (请注意,selectedIndex 是健全的,并且在浏览器中运行良好)。 (也感谢你没有因为投反对票而吓坏。最近在 DV'ing + 评论时被烧毁了)。
  • 学习很有趣——我没有查看规范,但我在 w3schools 中更常用的资源。
【解决方案3】:

我会尽我所能回答这个问题。如果某个机构有更详细的答案,请添加,我会将其标记为已接受。

由于浏览器或系统中的错误,Internet Explorer 7 在某些情况下似乎会崩溃。我们遇到问题的机器来自运行 Vista 的 HP。也许供应商安装了一些干扰浏览器的东西,例如“在我的 HP ProtectTools Security 上登录”,如下所述:http://social.msdn.microsoft.com/Forums/en/iewebdevelopment/thread/63216546-9289-4345-898c-860d02db7357

这里描述了其他可能性:http://www.akselvoll.net/2007/08/ie7-crashes-when-clicking-on-drop-down.html

简单的解决方法是将 Internet Explorer 升级到版本 8。

【讨论】:

    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    相关资源
    最近更新 更多