2013-07-11 81 views
-1

我目前正在JavaScript中處理一些輸入表單,並且已經通過腳本進行編輯,以便一旦用戶輸入問題的力數量,新的輸入文本字段每個數字顯示,也有一個按鈕被添加在結尾處。問題是,當我嘗試點擊這個按鈕時,我嘗試使用.map函數將所有文本字段值加入其中,並且什麼也沒有發生。jQuery輸入表單問題

function forceRecording(numofforces,$this){ 
    var addRows='<tr id=newRows>'; 

    for(var i =1; i<=numofforces;i++) 
    { 
     var nearTr=$this.closest('tr'); 
     addRows=addRows + "<td>Force " +i+": </td><td><form><input type='text' name='forceItem' id='newR'/></form></td>"; 
    } 

    addRows=addRows+"<td><div class='button' id='forceButton'> Add! </div></td></tr>"; 
    nearTr.after(addRows); 
}; 

$('#forceButton').click(function(){ 
    forces=$("input[id='newR']").map(function(){ 
    return $(this).val() 
});  

function forceRecording(numofforces,$this){ 
    var addRows='<tr id=newRows>'; 

    for(var i =1; i<=numofforces;i++) 
    { 
     var nearTr=$this.closest('tr'); 
     addRows=addRows + "<td>Force " +i+": </td><td><form><input type='text' name='forceItem' id='newR'/></form></td>"; 
    } 

    addRows=addRows+"<td><div class='button' id='forceButton'> Add! </div></td></tr>"; 
    nearTr.after(addRows); 
}; 

$('#forceButton').click(function(){ 
    forces=$("input[id='newR']").map(function(){ 
     return $(this).val() 
    }); 

    prompt("forces"); 
}); 

正如你可以看到我的forceRecording功能工作,並創建一個新的行與每numofforces新的文本輸入框,但一旦我嘗試一下forceButton輸入值到我的力量陣列沒有任何反應。任何想法可能會造成這種情況?

+0

您將創建具有相同的ID(ID = 'newR')的元件。這注定會失敗。 –

+1

以及一些建議不會傷害.. – bala

+0

我做到了。不要對多個事物使用相同的ID。這是計算的一個通用原則。 –

回答

1

你缺少收盤paranthesis在你的代碼在這裏

$('#forceButton').click(function(){ 
    forces=$("input[id='newR']").map(function(){return $(this).val() 
}); 

它應該是像這樣

$('#forceButton').click(function(){ 
    forces=$("input[id='newR']").map(function(){ 
     return $(this).val(); 
    }); 
}); 

而且不要用id代替使用a class name

$('#forceButton').click(function(){ 
    forces=$(".newR").map(function(){ 
     return $(this).val(); 
    }); 
}); 

應用類輸入字段這樣

<input type="text" name="forceItem" class="newR"/> 
+0

這不起作用,它讓我瘋狂! – bala

+0

所以,它不起作用,但你已經標記爲答案? –

1

我絕對不知道你想達到什麼樣的,但也許這將幫助:

function forceRecording(numofforces, $this) { 
    var addRows = '<tr id="newRows">'; 
    for (var i = 1; i <= numofforces; i++) 
     addRows += '<td>Force ' + i + ': </td><td><input type="text" name="forceItem" /></td>'; 
    addRows += '<td><input type="button" class="button" id="forceButton" value="Add!" /></td></tr>'; 
    $this.closest('tr').after(addRows); 
} 

$('#forceButton').click(function() { 
    forces = $(this).parent().parent().filter('input[name="forceItem"]').map(function() { return $(this).val(); }); 
});