0

IE6をダンプすること以外の提案...私はそれを制御することはできません:)

私がやろうとしていることの簡単な概要:選択した要素を持つフォームがあります。ユーザーがselectで特定のオプション(以下のコードのid type2)を選択すると、新しいselectを含むdiv構造が表示されます。phpを使用してdivのselectにデータを入力するため、新しいdiv構造とその子を既存の構造(id pdProgramDiv1)のクローンにします。選択が複製されたら、クローンのIDとdivの名前、およびその子ラベルを変更して、フォーム情報が送信phpスクリプトに渡されるため選択する必要があります。一意のIDがない場合は、クエリ文字列にシリアル化されますが、phpの$_POST配列には特定のIDの最後の値のみが含まれます。

Firefox sighで完全に機能し、IE6でIDと名前を変更できないコードを含めました。このコードは、一部のコードほど簡潔ではない場合があります。私はまだjQueryにかなり慣れていません。

$('#type2').change(function() {
    if ($('#type2 option:selected').text() == 'Program Director') {
        $('#pdProgramDiv1').clone().attr({id: 'pdProgramDiv2', name: 'pdProgramDiv2'}).appendTo($('#type2Div'));

        $('#pdProgramDiv2 > #pdProgram1').attr({id: 'pdProgram2', name: 'pdProgram2'});

        $('#pdProgramDiv2 > label').attr('for', 'pdProgram2');
    } else {
        $('#pdProgramDiv2').hide();
    }
}); 

私は周りを見回して、連鎖ではなく変数を使用し、オブジェクトリテラル(またはマップ)を使用するのではなくattrを個別に呼び出してみましたが、何も役に立ちません。すべてのバリエーションはFFで正常に機能しますが、IE6では喜びはありません。

これは既知の問題ですか、それとも誰かが変更を行う方法を教えてもらえますか?

これを機能させることができない場合は、すべての要素を作成して非表示にする必要があると思いますが、それはあまり良くないようです。

いつものようによろしくお願いします!

更新:解決済み

私のやり方の誤りを見つけてくれた人々に感謝します。問題を解決することになったコードを投稿したかったのです。以下の受け入れられた答えへの私のコメントで言ったように、修正は完全に理にかなっています。少し恥ずかしかったですが、見たことがありませんでしたが、時々新鮮な目が必要になります!唯一の変更は、select IDではなく子selectを選択し、divの名前attr割り当てを削除することです。これは、前述のように、何も実行しないためです。

$('#type2').change(function() {
    if ($('#type2 option:selected').text() == 'Program Director') {
        $('#pdProgramDiv1').clone()
            .attr('id', 'pdProgramDiv2')
            .appendTo($('#type2Div'));

        $('#pdProgramDiv2 > select').attr({
             id: 'pdProgram2', 
             name: 'pdProgram2'});

        $('#pdProgramDiv2 > label').attr('for', 'pdProgram2');
    } else {
        $('#pdProgramDiv2').hide();
    }
}); 
4

2 に答える 2

4

問題はここにあると思います...

$('#type2').change(function() {
    /* snip */
        $('#pdProgramDiv1').clone().attr({id: 'pdProgramDiv2', name: 'pdProgramDiv2'}).appendTo($('#type2Div'));

        $('#pdProgramDiv2 > #pdProgram1').attr({id: 'pdProgram2', name: 'pdProgram2'});
    /* snip */
});

コンテナのクローンを作成し、そのIDを切り替えて、ページに挿入し直します。コンテナは問題ありませんが、ページにはIDが#pdProgram1の2つの要素が含まれるようになりました。document.getElementByIdはそれを気に入らないでしょう。

コードをリファクタリングして、IDではなくタグでselect要素を検索します。

于 2010-02-04T20:00:26.340 に答える
0

IE6はノードのクローン作成をうまく処理できないため、IE6の問題でクラッシュしたと思います。clonned要素の名前とIDの修正に正確に失敗します...

詳細はこちら

于 2010-02-04T19:16:01.447 に答える