[英]jQuery, Ajax & PHP submit multiple forms dilemma
<!-- this is my jquery -->
<script>
$(document).ready(function(){
$("form#submit_wall").submit(function() {
var message_wall = $('#message_wall').attr('value');
var id = $('#id').attr('value');
$.ajax({
type: "POST",
url: "index.php?leht=pildid",
data:"message_wall="+ message_wall + "&id="+ id,
cache: false,
success: function(){
$("ul#wall").prepend(""+message_wall+"", ""+id+"");
$("ul#wall li:first").fadeIn();
alert("Thank you for your comment!");
}
});
return false;
});
});
</script>
<!-- this is my HTML+PHP -->
some PHP ...
while($row_pilt = mysql_fetch_assoc($select_pilt)){
print
<form id="submit_wall">
<label for="message_wall">Share your message on the Wall</label>
<input type="text" id="message_wall" />
<input type="hidden" id="id" value="'.(int)$row_pilt['id'].'">
<button type="submit">Post to wall</button>
</form>
下面是我的寫入mySQL的PHP腳本。
這是一個非常簡單的腳本。 但是,提交時變得有點復雜。 由於我的頁面上有多個表單(每個WHILE PHP LOOP),因此在我提交時-僅提交了FIRST表單。 此外,我提交的任何其他后續表單-數據都是從第一個表單中復制的。 有沒有清除數據的jQuery函數? -還是有更好的解決方案。
謝謝,尼克
這是因為您要給每個表單相同的ID,因此它將提交使用該ID找到的第一個元素,即第一個表單。 您應該做的是為每個表單分配一個唯一的ID,然后為每個表單提供一個AJAX提交功能,該功能可以提交特定於表單的數據。 您可以使用jQuery的$ .each()函數循環瀏覽所有表單,並使用Submit函數中的$(this).attr('id')檢索特定於表單的ID。
更新:正如對此答案的評論所揭示的,您實際上不需要each()函數,因為jQuery無論如何都將其應用於每個表單元素。
這將是一個示例腳本:
$(document).ready(function(){
$("form").submit(function() {
var message_wall = $(this).children('input[type="text"]').attr('value');
var id = $(this).children('input[type="hidden"]').attr('value');
$.ajax({
type: "POST",
url: "index.php?leht=pildid",
data:"message_wall="+ message_wall + "&id="+ id,
cache: false,
success: function(){
$("ul#wall").prepend(""+message_wall+"", ""+id+"");
$("ul#wall li:first").fadeIn();
alert("Thank you for your comment!");
}
});
return false;
});
});
因為我們看不到您的所有 form
,所以我不確定,但是考慮到您的問題,我將假設其他表單都共享相同的id
( form#submit_wall
),該id
必須是無效的在文檔中是唯一的。
鑒於您將要更改其他形式的id
(我建議使用class
名,可能是'submit_wall',但具體情況取決於您),jQuery也需要更改。 從:
$("form#submit_wall").submit(function() {
至:
$("form.submit_wall").submit(function() { // using the class-name instead of the id.
當然,現在,您遇到了重復id
的相同問題。
因此,我再次建議將id
更改為class
並更改:
var message_wall = $('#message_wall').attr('value');
var id = $('#id').attr('value');
至:
var message_wall = $(this).find('.#message_wall').attr('value');
var id = $(this).find('.id').attr('value');
鑒於以上您所發布的混亂情況,我很難相信這就是您所需要的。 這肯定將是值得張貼整頁(或演示JS小提琴或JS斌 ), 充分再現了你的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.