2013-10-01 79 views
-1

UPDATE: 我使用第一個評論者的checkNo []建議修改了代碼,因爲我認爲它可能有幫助,而且它更優雅。由jQuery創建的表單字段在提交時返回「undefined」

表格的初始硬編碼字段組看起來幾乎相同,除了我刪除了例如「1」 「checkNo1」現在只是「checkNo」

jQuery的,現在來創建新的字段組只是複製的初始代碼:

var checksDiv = $('#checkForms'); 
var i = $('#checkForms p').length + 1; 
var checkForm = $('#checkForms').html(); //COPY THE FIELD GROUP CODE 

    $('#addCheck').click(function() { 
      $(checkForm).appendTo(checksDiv); 
      $('#checkCount').val(i); 
      i++; 
    }); 

和循環現在看起來是這樣的:

for (i=1;i <= Request.Form("checkNo").Count; i++){ // LOOP THROUGH CHECKS 

     thisCheck = Request.Form("checkNo")(i); 
     thisAmt = Request.Form("amt")(i); 
     thisInvoices = Request.Form("invoices")(i); 
} 

結果?它仍然出現未定義...好像jQuery生成的字段不存在..但他們是。我看到他們,我填寫了他們,我看到他們在HTML ...他們在那裏,但是當我張貼表格,就像他們消失。

vvvvvvvvvvv PRE-UPDATE vvvvvvvvvvvvvvv

我有一個看起來像這樣我的形式(其中用戶可以添加檢查)的一部分:

<div id="checkForms"> 
    <p> 
    <label for="checkNo1"> 
     <input type="text" id="checkNo1" size="20" name="checkNo1" value="" placeholder="Check Number" /> 
    </label> 
    <label for="amt1"> 
     | $<input type="text" id="amt1" size="20" name="amt1" value="" placeholder="Amount" /> 
    </label> 
    <br/> 
    <label for="invoices1"> 
     <textarea name="invoices1" id="invoices1" placeholder="Invoice Amt" cols="50" rows="10"></textarea> 
    </label> 
    </p> 
    <hr/> 
</div> 

<h3><a href="javascript:void(0)" id="addCheck">Add Another Check</a></h3> 

<input type="hidden" id="checkCount" name="checkCount" value="1"> 
<input type="submit" name="submit" value="send" class="button sendit"> 

我有jQuery的添加新字段是這樣的:

var checksDiv = $('#checkForms'); 
var i = $('#checkForms p').size() + 1; 

    $('#addCheck').click(function() { 
      $('<p><label for="checkNo' + i +'"><input type="text" id="checkNo' + i +'" size="20" name="checkNo' + i +'" placeholder="Check Number" /></label> | $<label for="amt' + i +'"><input type="text" id="amt' + i +'" size="20" name="amt'+ i +'" placeholder="Amount" /></label><br/><label for="invoices' + i +'"><textarea name="note" placeholder="Invoice Amt" cols="50" rows="10"></textarea></label><a href="javascript:void(0)" class="remCheck">Remove</a></p><hr/> ').appendTo(checksDiv); 
      $('#checkCount').val(i); 
      i++; 
    }); 

,他們出現這工作得很好....

然後在提交時,我訪問值這樣的:

for (i=1;i <= checkCount; i++){ 
    thisCheck = Request.Form("checkNo"+i); 
    thisAmt = Request.Form("amt"+i); 
etc.... 

這是動態創建的第一組的「硬編碼」字段做工精細,但一切都來了「不確定」。我也試過這樣:

for (i=1;i <= checkCount; i++){ 
    thisCheck = "checkNo"+i; 
    thisCheck = Request.Form(thisCheck); 
etc.... 

並驗證它正在請求正確的表單字段名稱。

+0

'$(collection).size()'已被棄用,不應再使用。使用'$(collection).length'來代替(注意缺少括號 - 它是一個屬性,所以沒有函數調用的開銷)。 –

+0

什麼是Request?服務器端或客戶端對象?你爲什麼不使用'checkNo []'名字? – undefined

+0

'請求'是服務器端..表單發佈到它所在的同一頁面,並且請求值的JS在任何HTML –

回答

0

你發佈的服務器端代碼應該可以工作,但是你省略了etc....這很有趣。

在硬編碼部分有一個名爲invoices1的文本區,但在動態部分中,您沒有創建textarea 'invoices' + i,textarea的名稱是note(沒有索引)。

當您嘗試使用與其他字段相同的過程訪問這些textarea時,它將失敗。

+0

好眼睛...我改變了文本區域的名稱和ID,確實這樣做會失敗,但其他人不應該工作? 'etc ...'就是我以同樣的方式訪問textarea,然後解析內容。 –

+0

其他人應該工作,我同意。我沒有看到你發佈的代碼的其他問題。數據已被服務器端腳本接收? –

+0

有沒有辦法一次查看所有發佈的數據? –

相關問題