2

私はJQueryが初めてで、これが不可能だとは信じられません...

動的に作成される複数の HTML フォームがあります。フォームからデータを取得するために JQuery を使用していますが、フォームを送信すると、最後のフォームのデータにしかアクセスできません。

これが私のコードです:

for($x=0; $x<10; $x++){

     ?>
     <form method="POST" id="formid<? echo $x; ?>">
      <textarea name="notes_text"><? echo $row[2]; ?></textarea></td>
      <input type="hidden" value="<? echo $row[0]; ?>" name="notes_id" />
      <input type="image" src="/images/edit-small.png" id="update-notes-submit" class="submit-img-sml"/>            
     </form>
     <?

}

そしてjQuery:

$("form").submit(function(){

     var form_id = $(this).closest("form").attr('id');  
     alert(form_id);

     var notes_id=$('#formid1 input[name=notes_id]').val();
     var notes_text=$('#formid1 textarea[name=notes_text]').val();

}

アラートは私に正しいフォームを与えてくれるので、うまくいきます。

notes_id または notes_text 変数を警告すると、「未定義」になります。

私が試してみました:

var notes_id=$('#formid1 input[name=notes_id]').val();
= undefined

var notes_id=$('#formid2 input[name=notes_id]').val();
= undefined

var notes_id=$('input[name=notes_id]').val();
= data from the last form that appears in my script

フォームと変数を指定するにはどうすればよいですか。これを実現するのが非常に難しいとは信じられません。おそらくこれは JQuery では不可能であり、そうであれば衝撃的な制限です。

4

4 に答える 4

3

あなたはフォームIDがそうであると仮定していますがformid1、私は提出されたものではないと感じています. 次のことを試してください。

$("form").submit(function(){
     var form =$(this);//this refers to the form
     var notes_id=form.find('input[name=notes_id]').val();
     var notes_text=form.find('textarea[name=notes_text]').val();
 }
于 2013-02-09T01:37:05.463 に答える
1

わかりましたので、約8時間叩きのめした後、ようやくそれを理解しました。

この問題は、間違った場所にあるテーブル タグが原因でした。私はこの形式を使用していました:

<table>

 <?

 for($x=1; $x<=mysql_num_rows($notes); $x++){

      $row=mysql_fetch_row($notes);

      ?>
      <form id="form<? echo $x; ?>">

       <tr>
        <td width="150"><b>Text 1</b></td>
        <td colpsan="3"><textarea name="txtarea">Some text</textarea></td>
       </tr>

      <input type="hidden" value="<? echo $row[0]; ?>" name="notes_id" />        
      </form>

      <?

 }

?>

</table>

しかし、テーブルの開始タグと終了タグを for ループ内に配置すると、問題は解決しました。

 <?

 for($x=1; $x<=mysql_num_rows($notes); $x++){

      $row=mysql_fetch_row($notes);

      ?>

      <table>
       <form id="form<? echo $x; ?>">

        <tr>
         <td width="150"><b>Text 1</b></td>
         <td colpsan="3"><textarea name="txtarea">Some text</textarea></td>
        </tr>

       <input type="hidden" value="<? echo $row[0]; ?>" name="notes_id" />        
       </form>

      </table> 

      <?       

}

?>

以前は単一のテーブルが使用されていたのに、これがフォームごとにテーブルを作成するだけなので、なぜこれが機能するのかわかりません。

ご協力いただきありがとうございます - それは評価されています!

于 2013-02-11T18:10:03.180 に答える
0

</td>余分な後を取り除き</textarea>ます。フォームの外側に一致しているため、フォーム要素も終了しています。その結果、要素はフォーム内にありません。インスペクタで DOM を見てみると、これがいかに混乱しているかがわかります。

于 2013-02-09T02:32:18.527 に答える
-3

引用符がありませんか?

var notes_id=$('#formid1 input[name=notes_id]').val();
var notes_text=$('#formid1 textarea[name=notes_text]').val();

var notes_id=$('#formid1 input[name="notes_id"]').val();
var notes_text=$('#formid1 textarea[name="notes_text"]').val();

それらの引用が重要であることは確かです。

于 2013-02-09T01:48:22.923 に答える