2010-11-23 17 views
6

動的フォームを追加/削除します。私はテーブルに格納されているフォームを使用しています、各行はフォームを持っています。私は2つのテーブルを持っています: - 表示されているもの - 私はクローンして表示されたテーブルに挿入したい一時的な行で囲まれています。jQuery clone()FireFoxバグ - クローンフォームを送信できません。

IEではすべて正常に動作しますが、Firefoxのフォームを持つクローンの行は送信できません。行を複製せずに挿入するだけでフォームを送信できますが、その行を再利用して再挿入できるようにする必要がありますので、クローンを使用する必要があります。クローンの有無にかかわらず生成されたHTMLコードは、Firebugでも同じように見えます。どうすればこの問題を解決できますか?

コードは、クローニングに使用して行を挿入: $('#tempRow').clone().insertAfter($('#templatesTable tr:last'));

+0

マークアップの外観はどうなっていますか? –

答えて

6

あなたは確実にID属性を持つ何かのクローンを作成し、DOMにそれを再挿入することはできません。これにより、同じIDを持つ2つの要素があるため、無効なHTML文書が作成されます。 Firefoxが正常に動作しています。

フォームを複製してから、すべてのIDをユニークなもの(フォームとすべての入力と子要素)に変更する必要があります。その後、フォームを送信することができます。

tr要素をクローンしてテーブルに挿入しているようですか? tr要素がIDを持つ唯一のものであるならば、これは動作します:

$('#tempRow') 
    .clone() 
    .attr('id', 'tempRow-new') 
    .insertAfter($('#templatesTable tr:last')); 

は、フォーム要素–かのいずれかの場合、それはなどdiv含む子供、framesetinput、–だということ、しかし、している忘れないでくださいIDを削除するには、そのIDを削除するか、変更する必要があります。そうしないと、無効な文書が残っていて、まだ問題がある可能性があります。

さらに

上記のコードが再利用可能ではありません。 2回目にフォームを複製しようとすると、IDがtempRow-newの2つの要素があります。行を何度も複製する必要がある場合は、クローンされたすべての要素が一意であることを保証するために、増分する数値またはある種のUUIDを追加する必要があります。

+0

はい、これはFirefoxの問題を解決しているようです。しかし、私はIEでエラーが発生しました:var cloned = $( '#tempRow')。clone()。attr( "id"、 "tr" + trLastId); $( 'form'、クローン).attr( "id"、 "form" + trLastId);最後の行に 'Object does not supported this property or method'というエラーが表示されます。私はjQuery 1.3.2を使用しています。 – qba

+0

これは奇妙です...あなたのコードは大丈夫です。 Firebugでは、これを行うことができます: 'console.debug($( 'form'、cloned).length);' – Stephen

関連する問題