2017-09-25 80 views
0

我想弄清楚如何從表單提交到特定的div輸出ajax響應。該表單是動態生成的按鈕,其中包含來自mysql的數據作爲值,每個生成的按鈕也有一個爲此結果創建的div。使用ajax填充動態創建的div

Example form id's: 
id="form1" 
id="form2" 
id="form3" 
id="form4" 

div id's: 
<div class="res" id="result1">Display form1 data</div> 
<div class="res" id="result2">Display form2 data</div> 
<div class="res" id="result3">Display form3 data</div> 
<div class="res" id="result4">Display form4 data</div> 

這是我的示例表單。 $ count在while循環內增加id「form」。

echo '<form name="v" action="test.php" value="' . $row['data'] . '" method="post" id="form' . $count . '"><input name="v" type="hidden" value="' . $row['data'] . '"><input type="submit" class="btn" value="Submit"></form>'; 

我能得到這個工作,但它會填滿所有的div與點擊提交按鈕成功響應,如果我只是用「.RES」爲這就是爲什麼我使用需要的唯一ID的類$ count增加的數字。我不確定如何做到這一點。

$(document).ready(function(){ 
    $(document).on("submit", "#form", function(event) 
    { 
     event.preventDefault();   
     $.ajax({ 
      url: $(this).attr("action"), 
      type: $(this).attr("method"), 
      dataType: "text", 
      data: new FormData(this), 
      processData: false, 
      contentType: false, 
     success: function(data, status) { 
      $(".res").html(data); 
     }, 
     error: function() { 
      alert('An error occurred.'); 
     } 
     });   
    }); 
}); 

有人能幫我嗎?謝謝。

回答

0

您可以與數據屬性延伸form標籤,包含靶的div。

echo '<form name="v" action="test.php" value="' . $row['data'] . '" method="post" id="form' . $count . '" data-target="result' . $count . '">...'; 

,後來你的Ajax成功功能裏面,做這樣的事情

$(document).ready(function(){ 
    $(document).on("submit", "form[data-target]", function(event) 
    { 
     var $target = $('#' + $(this).data('target')); 
     event.preventDefault();   
     $.ajax({ 
      url: $(this).attr("action"), 
      type: $(this).attr("method"), 
      dataType: "text", 
      data: new FormData(this), 
      processData: false, 
      contentType: false, 
     success: function(data, status) { 
      $target.html(data); 
     }, 
     error: function() { 
      alert('An error occurred.'); 
     } 
     });   
    }); 
}); 
+0

得到它的工作。非常感謝。 – rich

+0

這不處理重複的ID的形式 – mplungjan

+0

@mplungjan我申請一個小的變化,以擺脫「重複表格ID」問題 – Philipp

0

的ID必須是唯一的,這樣反而做

$(document).on("submit", "form", function(event) { 
    event.preventDefault(); 
    var id = this.id; // form1, form2 etc 
    .... 

$(document).on("submit", "form[name='v']", function(event) { 
    event.preventDefault(); 
    var id = this.id; // form1, form2 etc 
    .... 

然後

$("#"+id.replace("form","result")).html(data); // result1, result2 etc 

或窗體上使用的數據屬性:

echo "<form data-id='result".$count."' ....> 

和具有

$(document).on("submit", "form[name='v']", function(event) { 
    event.preventDefault(); 
    var id = $(this).data("id"); // result1, result2 etc 
    .... 

然後

$("#"+id).html(data); // result1, result2 etc 
+0

它比更完整接受的答案在我看來 - 它處理沒有身份證的表格,因爲您似乎有重複的身份證 – mplungjan

+0

老實說,很難選擇,並且您也先回復並給予很多有用的信息,我很欣賞,但因爲我只是複製和粘貼其他人的代碼,並做了一些小的改變,我接受了他的。 – rich

+0

嗯,對。所以根據你的需要,我實際上受到了不止一個建議的懲罰。不管。享受 – mplungjan

0

您可以使用.each()提供了一個計數器變量的事實:

$("form").each(function (i) { 
    $(this).on("submit", function() { 
    // ... 

    // in the ajax success callback: 
    $(".res").eq(i).html(data); 
+0

這是相當脆弱的,容易出錯,如果需要的形式向其他目標的div – mplungjan

+0

真實的,但很容易使其更加健壯。我只是表明這種方法存在,不是一個理想的解決方案。 –