2013-07-11 80 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(); }); 
});