1

これは、私のプロジェクトが数日間死んでしまったものです。
標準的な値の表があります。次のようなスケルトンを使用します。

<table><tbody><tr><td>Stuff!</td></tr></tbody></table>

tbodyユーザーがテーブルに新しい値を追加できるように、インライン Rails 3 フォームを jQuery を使用してロードしようとしています。これは、コントローラーの新しいアクションを取得するボタンで行われます。これは、フォームのレンダリングされたパーシャルをテーブルに追加するだけの new.js.erb を呼び出します ( $("table tbody").prepend('<%= escape_javascript(render 'form') %>');)。

フォームのパーシャル自体は次のようになります。

<tr>
  <td>
    <%= form_for @model, :remote => true do |f| %>
  </td>
  <td>
    <%= f.text_field :column %>
  </td>
  <td>
    <%= f.submit "Add" %>
    <% end %>
  </td>
</tr>

ここから混乱が始まります。Webkit ブラウザーと IE では、これは期待どおりに機能します。結果の HTML は次のようになります。

<table>
  <tbody>
    <tr>
      <td>
        <form>
        </form>
      </td>
      <td>
        <input>
      </td>
      <td>
        <input type="submit">
      <td>
    </tr>
    <tr>The list of values</tr>
  </tbody>
</table>

もちろん、入力が始まる前にフォームが同じセルで開始および終了するという事実は、何かがうまくいかないという危険信号を発するはずです。ただし、フォームは引き続き送信され、それ以外の場合は完全に機能します。

Firefox では、これは当てはまりません。フォームは次のようにレンダリングされます (他はすべて同じであるため、前に追加された行内のもののみが示されています)。

<td>
  <form>
  </form>
  <td>
    <input>
  </td>
  <td>
    <input type="submit">
  <td>
</td>

ここでの違いは、Webkit/IE ブラウザーとは異なり、Firefox はすべてをformタグのセルに入れることです。また、フォームはまったく機能しません - 送信さえしません。リクエストも送信されません。

さて、私の調査のいくつかから、おそらくここで大きな間違いを犯していることがわかりました.違いは、ブラウザが私が省略したものをさまざまな方法でレンダリングしようとするという事実によるものです. それをいじってみると、Rails フォームがテーブルと対話する方法とはほとんど関係がないことがわかりました。テーブル内でパーシャルをレンダリングするだけの場合、HTML はブラウザー間で同一です (フォーム タグは他の入力よりも前に閉じます)。 <% end %> を間違った場所に置いている可能性があります)。jQuery を使用してレンダリングされたパーシャルを先頭に追加すると、何か問題が発生します。おそらく、囲んでいるテーブル タグがないためにパーシャルが正しくレンダリングされず、テーブルに挿入され、問題が発生します。

本当に、私は困惑しました。私はこれを広範囲に探しましたが、接線的に関連する質問がいくつかありますが、私の問題に実際に当たるものはないようです.

私は非常に単純な間違いを犯したと思っていますが、それは何ですか?

どんな助けでも大歓迎です!問題をできるだけ明確に説明したことを願っています。

4

1 に答える 1

2

部分を見ると、それは非常に明白です。ネストエラーがあります。ある要素(この場合はテーブルセル)内でフォームタグを開く場合は、そこでも閉じる必要があります。マークアップの検証は、このような場合に役立ちます。

テーブルを使用する必要がある場合は、その周りにフォームタグを配置して、ページ全体を挿入できます。

于 2010-11-25T00:08:50.850 に答える