2013-03-25 35 views
6

在JQuery中,为什么使用以下代码获取information UndefinedJQuery - 字符串列表

JS - 右边部分是不确定的

var s = $("[name='CountAnswer']").val(); 

HTML

<input style="width:150px" type="text" id="CountAnswer_1_" name="CountAnswer[1]"> 
<input style="width:150px" type="text" id="CountAnswer_2_" name="CountAnswer[2]"> 
<input style="width:150px" type="text" id="CountAnswer_3_" name="CountAnswer[3]"> 

回答

6

您正在使用的平等水平的研究,但你必须使用通配符可能Ĵquery attribute starts with^但上面的语句会给出第一个匹配元素的值。您可以使用它们遍历所有元素。

var s = $("[name^='CountAnswer']").val(); 

使用each()进行迭代。

Live Demo

$("[name^='CountAnswer']").each(function(){ 
    alert($(this).val()); 
    //or 
    alert(this.value); 
}); 

编辑基于OP意见。获取所有匹配的值。

Live Demo

strValues = $("[name^='CountAnswer']").map(function(){ 
    return this.value; 
}).get().join(','); 
+0

好吧,但我想这个保存为字符串,如何做到这一点的列表? – 2013-03-25 10:52:54

+0

您可以使用地图,稍后检查我更新的答案。 – Adil 2013-03-25 10:53:52

+0

只是提示,下次使用'console.log'而不是'alert'。当标签焦点改变时,这很烦人。 :| – hjpotter92 2013-03-25 11:29:21

5

因为你没有的元素,其名称是== CountAnswer。您需要指定一个特定的名称,例如:

$("[name='CountAnswer[1]']").val(); 

或者,你可以使用“开头是”通配符(^),以他的名字开始的所有元素匹配CountAnswer

$("[name^='CountAnswer']").val(); 

这当然,只会返回匹配集中第一个元素的值,因为这是val()的行为。

+0

感谢您的时间和答复,但Adil给予了更好的答复 – 2013-03-25 11:02:51

3

jsFiddle demo

您应该建立一个数组的字符串值,然后在一些事件中使用jQuery的部分匹配选择,"starts with"(^),迭代的你的名字表示的投入就行了。

演示HTML:

<input value="a" style="width:150px" type="text" id="CountAnswer_1_" name="CountAnswer[1]"> 
<input value="b" style="width:150px" type="text" id="CountAnswer_2_" name="CountAnswer[2]"> 
<input value="c" style="width:150px" type="text" id="CountAnswer_3_" name="CountAnswer[3]"> 
<br><input type="button" id="b" value="show string list" /><div id="console"></div> 

演示JS:

var stringList = []; 
$('#b').click(function(){ 
stringList = []; 
$("[name^='CountAnswer']").each(function(){ 
    stringList.push(this.value); 
}); 
var c = $("#console"); 
for(var i = 0; i < stringList.length; i++){ 
    var d = $("<div>"); 
    d.html(stringList[i]); 
    c.append(d); 
} 
console.log(stringList); 
});