livequeryは送信イベントを処理すると思っていましたが、それでも問題が発生したときは、live()も処理することにしました。
送信ボタンのクリックイベントにバインドしようとしたときに、フォームを見つけるのにも問題がありました。
ファイアバグの送信ボタンを調べていたときに、フォームの子として表示されていないことに気付きました。そのため、firebugが私の送信ボタンが私のフォームの子要素であることがわからない場合、jQueryにはどのような問題があったのか(そしておそらくW3Cバリデーターが理由で不平を言っていた)と思いました。
そこで、代わりにdivタグ内にある別のフォームで上記と同じコードを試しましたが、機能したので、この質問のフォームからテーブルタグをすばやく削除しましたが、驚くほど機能しました。
私の解決策は、HTMLを有効にするために余分な時間をかけ、jQuery 1.3.3、 http: //docs.jquery.com/Release: jQuery_1.3.2までは機能しないと思われるものを使用することです。
以下は私の現在のコードです。フォームを適切にマークアップするために理解する必要があります。
$('form.edit_color')。live('submit'、function(){var form = $(this); var colorRow = $(this).closest('div.color_form'); var action = $(form ).attr('action'); var formData = $(form).serialize(); $(colorRow).fadeOut(); $ .post(action、formData、function(data){$(form).replaceWith( data); $(colorRow).fadeIn();
}); return false;});
<div class="color_form">
<% form_for color, :url => admin_color_path(color) do |f| -%>
<div style="background: #<%= color.value %>"></div>
<div><%= f.text_field :title %></div>
<div><input type="text" size="30" name="color[value]" class="colorpickerfield" value="<%= color.value %>" /></div>
<div style="text-align:left">
<% Color.types.each do |type, name| %>
<div>
<%= color_types_checkbox(color, type) %>
<%= name %>
</div>
<% end %>
</div>
<div>
<%= f.submit "Update", :class => 'submit' %>
</div>
<% end %>
</div>