2


1

onChangeがInternet Explorer 7をクラッシュさせるのはなぜですか?

オンラインショップをリリースしました。

このページでは、一部のコンピューターでselectboxesがInternet Explorer 7をクラッシュさせます。 私のコンピューターでは決して。 誰が理由を知っていますか?

ライブリンク:[line-through] * http://velour.se/collection/women/tops/eloise*更新:最初に投稿したようなものがクラッシュしなかったことがわかりました。 しかし、次のとおりです。http://velour.se/collection/women/outerwear/irina

スクリーンダンプ:http://skitch.com/jesperlind/nc4j2/tops-eloise-velour-ie7-bug

元のバージョン:

//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 += "" + i + "";
        }
        $("#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:

    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);

    }

更新

一部のコンピューターでInternet Explorer 7がクラッシュする理由を正確に把握していません。 上記のコードは、それとは何の関係もありませんでした。 もっと簡単になりました。 オプションが1つしかない選択ボックスをクリックすると、ブラウザがクラッシュしました。 このような:

1

私はこのリンクでいくつかの情報を見つけました。そこでは、単一のオプションにも選択された属性が必要であると言われていますが、属性がないとクラッシュするようです。

3 Answer


1


まず、マークアップに「javascript:」プレフィックスは不要です。 ハンドラーは、それがjavascriptコードであることを期待し、ブラウザーが実際にそれを解析することに驚いています。 一般的には、 `href`属性のプロトコルタグとして表示されますが、それでもそれを処理するのに適した方法ではありません。 第二に、関数のパラメーターは、value属性が十分にサポートされている場合とサポートされていない場合があるDOM要素(select)への参照です。 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 );


1


「クラッシュ」とは、「Internet Explorerがクラッシュする」のではなく、「JavaScriptが機能しない」ことを意味します。ページだけの場合、通常はステータスバーの[ページのエラー]をクリックしてエラーを確認できます。 +また、いくつかの古典的なJavaScriptデバッグを試してください-クラッシュするブロックが見つかるまで関数のブロックを1つずつコメントアウトしてから、行に絞り込みます。


1


できる限り最善を尽くして答えます。 より詳細な回答がある場合は、追加してください。代わりに承認済みとしてマークします。

Internet Explorer 7は、ブラウザまたはシステムのバグが原因で、状況によってはクラッシュするようです。 問題が発生したマシンは、Vistaを実行しているHPのマシンです。 おそらく、ここで説明されているように、Venderが「HP ProtectToolsセキュリティにサインオンする」などのブラウザーを妨害するものをインストールした可能性があります。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にアップグレードすることです。