2013-02-09 66 views
2

我是新來的jQuery和我都不敢相信這是不可能的......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(); 

} 

警報給了我正確的formid,這樣的作品。

如果我提醒notes_id或notes_text變量,我會得到'undefined'。

我曾嘗試:

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來說是不可能的,如果是這樣的話,這是一個令人震驚的限制。

+0

爲什麼你不能在提交中引用表單數據?是不是可以這樣做:'$(「form」)。submit(function(data)'其中data是你想通過選擇器獲得的值嗎? – Leeish 2013-02-09 01:57:48

+0

''後面有''。在表單外部匹配'​​',所以表單元素也被終止,結果''''元素不在表單中。查看檢查器中的DOM,你會看到如何搞砸這是。 – Barmar 2013-02-09 02:19:46

回答

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(); 
} 
+0

我覺得他在他的語法中缺少引號,因爲你。 – Leeish 2013-02-09 01:48:54

+1

@Leeish在這種情況下不需要報價。見http://jsfiddle.net/GUnzU/ – 2013-02-09 01:50:55

+0

他說:「警報給了我正確的formid,以便工作。」順便說一句。所以,雖然我認爲你的建議可能仍然是正確的,但如果這個ID是正確的,它怎麼可能指的是錯誤的形式? – Leeish 2013-02-09 01:55:14

-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(); 

很確定那些報價很重要。

+0

不,不重要 - 引用無關緊要 - 請參閱http://jsfiddle.net/GUnzU/ – 2013-02-09 01:51:33

+0

WTF,使用這樣的選擇器。爲什麼沒有。 – Leeish 2013-02-09 01:52:34

+0

你生氣jQuery嗎? – 2013-02-09 01:53:12

0

刪除</textarea>後無關的</td>。它與表單外部匹配,所以表單元素也被終止。因此,這些元素不在表格中。看看檢查器中的DOM,你會看到這是多麼糟糕。

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> 

     <?  

} 

?> 

我不知道爲什麼這個工程,因爲就我所見,這只是爲每個表單創建一個表格,之前使用的是單個表格。

非常感謝你的幫助 - 這是appareciated!

+0

不要忘記將此問題或此問題的任何其他答案標記爲「已接受」,有關詳細信息,請參閱[此鏈接](http://meta.stackexchange.com/a/5235/187921)。 :) – 2013-03-07 03:14:02