IE6属性(IDおよび名前)をJQUERY ATTR CALLで変更していない - 提案はありますか?
-
18-09-2019 - |
質問
IE6を捨てる他の提案
私がやろうとしていることの簡単な概要:選択した要素を含むフォームがあります。ユーザーがselect(以下のコードのIDタイプ2)で特定のオプションを選択すると、新しい選択を含むDIV構造を表示します。 PHPを使用してdivのselectを入力するため、新しいdiv構造とその子供が既存のもの(id pdprogramdiv1)のクローンになりたいです。選択がクローン化されたら、divとその子ラベルのクローンのIDと名前を変更し、フォーム情報が送信PHPスクリプトに渡されているために選択する必要があります。一意のIDがない場合、クエリ文字列にシリアル化されていますが、PHPの$ _POSTアレイには、特定のIDの最後の値のみが含まれます。
Firefoxで完全に機能するコードを含めました はぁ, 、および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();
}
});
私は周りを見回し、チェーンではなく変数を使用してみました。また、オブジェクトのリテラル(またはマップ)を使用するのではなく、個々の呼び出しをタートに呼びましたが、何も役に立ちませんでした。すべてのバリエーションはFFでは正常に機能しますが、IE6では喜びはありません。
これは既知の問題ですか、それとも変更を行う方法を教えてもらえますか?
これを機能させることができなければ、すべての要素を作成して隠す必要があると思いますが、それはそれほど良くないようです。
いつものように事前に感謝します!
更新:解決しました
私のやり方の誤りを見つけた人々に感謝します。問題を解決することになったコードを投稿したかったのです。以下の受け入れられた答えへのコメントで言ったように、修正は完全に理にかなっています。少し恥ずかしいことに私はそれを見ませんでしたが、時には新鮮な目が必要です!唯一の変更は、選択されたIDではなく子供の選択を選択し、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();
}
});
解決
あなたの問題はここにあると思います...
$('#type2').change(function() {
/* snip */
$('#pdProgramDiv1').clone().attr({id: 'pdProgramDiv2', name: 'pdProgramDiv2'}).appendTo($('#type2Div'));
$('#pdProgramDiv2 > #pdProgram1').attr({id: 'pdProgram2', name: 'pdProgram2'});
/* snip */
});
コンテナをクローン化し、IDを切り替え、ページに挿入します。コンテナは問題ありませんが、ページは2つの要素をid'd#pdprogram1にします。 document.getElementByIDはそれを好まないでしょう。
コードをリファクタリングして、IDではなくタグで選択要素を検索します。
他のヒント
IE6の問題でクラッシュしたばかりだと思います。なぜなら、ノードのクローニングをうまく処理しないからです。クローン要素の名前とIDの修正に正確に失敗します...
より詳しい情報 ここ.