0

私は奇妙なバグを持っている、これは私のコードIE7 jQueryの.cloneと.serialize

var form = $("form").clone(); 
hiddenNodes.clone().appendTo(form); 
parameters = form.serialize(); 

チェックボックスがチェックされていない場合、私は、この形式でいくつかのチェックボックスと他のいくつかの入力を有し であると私はそれをチェックし、パラメータ文字列には、そのチェックボックスの正しい値が含まれます。しかし、チェックボックスをオフにしたい場合は、パラメータ文字列が常にtrue(チェックボックスが最初に応答した値)です... Firefoxで動作します...

編集:以下は関連しませんが、私はMVC3とMVC3を使用すると、チェックボックスとチェックボックスの両方に2つの入力が表示されます。これは、フォームを送信するときにチェックボックスのみを送信するためです。隠しフィールドは常に値がfalseなので、チェックボックスをオンにすると、同じ名前(最初の値はtrue、もう1つはfalse)の2つの入力が得られますが、MVCモデルバインダーは最初のものだけを取ります。チェックボックスをオフにすると、値がfalseの隠しフィールドのみが送信され、バインダーはそのフィールドにバインドされます。

これは、完全なサブミット、私はajax投稿をしてフォームデータを取得するときです。私はjqueryシリアライズフォームを行います.Firefoxではserializeが各入力の最初の出現を取ります。 IE7には両方が含まれています。チェックボックスの値がtrueであるため、モデルバインダーはそれにバインドされます。この問題を解決する解決策はありますか?それがどこから来たとき、それが見えたとして、ここで

form.clone()IE7でから読むには常にHTMLを返します。 私はserializaing前にすべての未チェックのチェックボックスを削除することができ、という

EDIT2の最良の方法ですサーバーであるため、チェックボックスがサーバーからチェックされている場合は、form.clone()を実行するときにチェックされます。私は、AJAXを使用してマークアップを破壊するカントので、それを複製する必要があります...

EDIT3:これはスゴ を取得するチェックボックスをサーバーからチェックされているときEDIT2のみ真である、この場合にはクローンは常になりますあなたがチェックを外していればチェックされています...しかし、チェックボックスがサーバからチェックされていない場合、それをチェックすると、クローン形式のチェックボックスが表示されます。

編集:これは私があればノード
に古いinnerHTMLプロパティを追加するためにこれらの行を持っている必要がありcloneNodeをした後に問題

を修正(jQuery.browser.msie & &(jQuery.browser.version < = 7)) clone.innerHTML = elem.innerHTML;

問題は、jQueryコアAPIを変更することは決して良い解決策ではありません。なぜなら、何らかの理由でjQueryチームはそれを修正したくないからです。私は、要素のcloneNodeメソッドをオーバーライドしようとし、そこにコードを追加しましたが、FFではなくIEで動作しました。jQueryのクローンメソッドをオーバーライドしようとしましたが、その部分は機能しましたが、誰もが実際のAPIに変更することなく、jQueryのへのコードの行の上に追加する良い方法がありましたら....

をjQueryの外にアクセスする方法は私が

+0

あなたはhtmlコードを投稿できますか、あなたは間違いを犯している可能性があります。 – Val

+0

IEの開発ツールで何が起きたのですか?私は、古いバージョンのIEがjQueryをDOMに挿入するときに、DOMが「有効ではない」と思っているため、非常に厄介であると感じました。 – m90

+0

編集 – Anders

答えて

1

http://bugs.jquery.com/ticket/6486を教えてください上のバグ報告に関するいくつかの情報を示していますトピック。

また、次のコードを追加してみてください、あなたは.cloneを適用する前に、それが実行されることを確認することができます

document.getElementById('id').onclick = function() { 
    var broken = document.getElementById('id'); 
    if (broken.checked) broken.setAttribute('checked','checked'); 
    else broken.removeAttribute('checked'); 
}; 

IEは一部がinner-/outerHTMLの問題を知っているので、それがうまくいくかもしれません。

+0

を参照してくださいええ、私はそれが昨日見つけましたが、idは役に立たなかったので、jQueryコアを変更して動作させる必要がありましたが、それは責任のない解決策ではないので、要素レベルでcloneNodeメソッドが動作しませんでした..コードの編集を参照してください – Anders