2012-03-04 47 views
0

我有一個由php函數生成的表,其中每行都包含一個Action Button,它實際上是一個包含隱藏數據的表單。當我點擊操作按鈕時,我希望能夠將來自隱藏輸入值的數據傳遞給AJAX調用。目標正確的表單輸入值,同時在同一頁上使用多個表單-PHP AJAX JQUERY

這是我到目前爲止有:(這個當前代碼是從第1形式,如果用戶點擊第二個表單操作按鈕,選擇數據無論)包含窗體

<table class="table"> 
    <thead> 
     <tr> 
      <th>Card Type</th> 
      <th>Name on Card</th> 
      <th>Number</th> 
      <th>Expires</th> 
      <th>CVC</th> 
      <th>Action</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>VISA</td> 
      <td>testname testlname</td> 
      <td>xxxxxxxxxxxx9999</td> 
      <td>12/15</td> 
      <td>123</td> 
      <td> 
       <form method="post" class="scc"> 
        <input type="hidden" value="VISA" name="scc_ccType1" id="scc_ccType1"> 
        <input type="hidden" value="testname testlname" name="scc_ccOwner1" id="scc_ccOwner1"> 
        <input type="hidden" value="4444777711119999" name="scc_ccNumber1" id="scc_ccNumber1"> 
        <input type="hidden" value="12" name="scc_ccExpiresMt" id="scc_ccExpiresMt"> 
        <input type="hidden" value="15" name="scc_ccExpiresYr" id="scc_ccExpiresYr"> 
        <input type="hidden" value="123" name="scc_ccCVC1" id="scc_ccCVC1"> 
        <input type="submit" value="Select Card" name="select_scc" id="select_scc"> 
       </form> 
      </td> 
     </tr> 
     <tr> 
      <td>VISA</td> 
      <td>testname testlname</td> 
      <td>xxxxxxxxxxxx1111</td> 
      <td>12/15</td> 
      <td>123</td> 
      <td> 
       <form method="post" class="scc"> 
       <input type="hidden" value="VISA" name="scc_ccType1" id="scc_ccType1"> 
       <input type="hidden" value="testname testlname" name="scc_ccOwner1" id="scc_ccOwner1"> 
       <input type="hidden" value="4444555566661111" name="scc_ccNumber1" id="scc_ccNumber1"> 
       <input type="hidden" value="12" name="scc_ccExpiresMt" id="scc_ccExpiresMt"> 
       <input type="hidden" value="15" name="scc_ccExpiresYr" id="scc_ccExpiresYr"> 
       <input type="hidden" value="123" name="scc_ccCVC1" id="scc_ccCVC1"> 
       <input type="submit" value="Select Card" name="select_scc" id="select_scc"> 
       </form> 
      </td> 
     </tr> 
    </tbody> 
</table> 

jQuery代碼

<script defer="defer" type="text/javascript"> 
$(document).ready(function() { 
    $("#select_scc").live("click", function() { 

     var postData = { 
     'authorize'  : 2 , 
     'cc_type'      : $("#scc_ccType1").val(), 
     'cc_number'      : $("#scc_ccNumber1").val(), 
     'cc_expdate_month'    : $("#scc_ccExpiresMt").val(), 
     'cc_expdate_year'    : $("#scc_ccExpiresYr").val(), 
     'cc_security_code'    : $("#scc_ccCVC1").val(), 
     'owner'       : $("#scc_ccOwner1").val(), 

     }; 

     $.ajax({ 
       url: "<?php echo base_url().'admin/creditcard';?>", 
       type:'POST', 
       data: postData, 
       dataType: 'json', 
       success: function(scard){ 
        alert(scard); 
       } 
     }); 

     return false; 
    }); 
}); 
</script> 
+1

不是最完美的解決方案,而是改變你的形式之一,一個標識ID必須是唯一的,並且不能在同一文檔中使用兩次。然後只需添加第二個ID所需的JS。另外,如果使用jQuery 1.7+ .live()已被棄用,應該用.on()替換,並且取決於您打算做什麼,您應該可以.serialize()您的表單而不是現在正在做的事情。 – adeneo 2012-03-04 17:48:06

+1

我不會在該頁面的任何位置以純文本格式輸入信用卡號碼或CVC代碼。這應該只從數據庫中查詢,後者有希望加密。 – 2012-03-04 17:57:51

+0

感謝評論,這爲後端,所有數據都加密,將ID更改爲類,這是我的一個錯誤。如何在序列化後推送新的數組鍵和值? – 2012-03-04 18:36:43

回答

1

首先IDS需要是唯一的,所以也許可以改變生成它們的php來添加「select_scc」作爲類。

然後做somethinbg這樣的:

$('submit#select_scc').on('click', function() { 
    var $this = $(this); // caches $(this), which is the select_scc element. 

    // Now to get each value for the form that the user clicked on. 
    var postData = { 
      'cc_type' : $this.siblings('#scc_ccType1').val(), 
      'cc_number' : $this.sibling('#scc_ccNumber1').val(), 
      // ........ etc 
     }; 

     // now just run the ajax function as you are doing. 
}); 

也許你會與這個點擊功能問題,如果當用戶點擊,那麼就功能捆綁到已經有一個元素不會產生「select_scc」 。例如說是產生一切都是所謂的「#container的」預先定義的DIV中,然後寫點擊功能是這樣的:

$('#container').on('click', 'submit#select_scc', function() { 
}); 

.live已被棄用,只是點到了。對功能,所以只是直接使用.on會節省您一些加載時間。

+0

感謝您的回答,我即將得到一個錯誤,說$ this.sibilings不是一個函數 – 2012-03-04 18:19:01

+0

你緩存$這第一個?在我的代碼中看到第2行。除此之外,我看到我在'cc_number'上輸入了錯字,應該是.siblings()而不是.sibling()。 – ninja 2012-03-04 18:23:56

1

這是一種使用窗體類作爲選擇器的簡單得多的方法,ID的無關緊要。使用serialize()保存必須手動創建整個數據對象。

live()已被棄用,但我不知道你用的是什麼版本的jQuery所以我與它堅持現在

$(function(){ 

$('form.scc').live('submit',(function(){ 
    var postData = $(this).serialize(); 
    $.ajax({ 
      url: "<?php echo base_url().'admin/creditcard';?>", 
      type:'POST', 
      data: postData, 
      dataType: 'json', 
      success: function(scard){ 
       alert(scard); 
      } 
    }); 

    return false; 
}); 

}); 
+0

感謝您的回答,如果我想包括一些硬編碼的數組鍵和值到這個postData數組中,我怎麼能在使用serialize()之後做到這一點? ??? – 2012-03-04 18:28:25

+0

簡單的方法是urlencode它們並連接到postData ...查看序列化結果http://api.jquery.com/serialize/ – charlietfl 2012-03-04 18:41:56

相關問題