我有3组单选按钮,每组包含多个单选按钮。虽然我可以确保每个组在bootstrap3中使用data-toggle="buttons"
,但每个组只选择一个答案。到目前为止一切正常。
下面的函数在click事件中触发并返回所选项的值。我的问题是如何处理存储在数组values
中的返回值,并为每个键赋予一组与按钮组对应的名称。
假设我选择了Red + small + Circle
,那么getValues
将返回密钥=>价值观:
现在,如果我选择small + Circle
:
值按照选择的顺序存储,我试图获取此值以根据选择构建查询..
我希望以这种格式存储值:
d
<input type="radio" name="color" value="red"/> Red /// Grp 1 Color
<input type="radio" name="color" value="blue"/> Blue
<br/>
<input type="radio" name="size" value="small"/> small /// Grp2 Size
<input type="radio" name="size" value ="Large"/> Large
<br/>
<input type="radio" name="shape" value="circle"/> Circle /// Grp3 Shape
<input type="radio" name="shape" value="square"/> Square
function getValues(){
var values = [];
for(var x = 0; x < radios.length; x++){
if(radios[x].type == "radio" && radios[x].checked){
values.push(radios[x].value);
}
}
return values;
}
$( "#Btn" ).click(function() {
var x = getValues();
$.each(x, function(k, v) {
//display the key and value pair
alert(k + ' is ' + v);
});
由于
答案 0 :(得分:1)
如前所述,JS中的数组处理方式不同。你真正想要的是一个Hash Table ......这只是一个对象(有点像)。
您可以使用的技术是创建一个类似于Array的对象,其中包含名称作为键和索引。
重要的是要注意,这不是一个功能齐全的数组对象,因为它没有实现push,pop,slice等...
var values = {},
length = 0;
for(var x = 0; x < radios.length; x++){
if(radios[x].type == "radio" && radios[x].checked){
//Assign the name as a key on the object
values[radios[x].name] = radios[x].value;
//Also assign the index as a key
values[x] = radios[x].value;
length += 1;
}
}
values.length = length;
return values;
那么这对你有什么作用呢?
嗯,它允许您按键访问各个项目:
values['bob'];
它还允许您通过索引访问它们:
values[0];
更好的是,您可以使用普通for循环迭代它们:
for(var i = 0; i < values.length; i++){
//I act just like an array!!
values[i];
}
答案 1 :(得分:1)
试试这个。
我认为在Javascript中可以使用Associate数组。
<input type="radio" name="color" class="radioGrp" value="red"/> Red
<input type="radio" name="color" class="radioGrp" value="blue"/> Blue
<br/>
<input type="radio" name="size" class="radioGrp" value="small"/> small
<input type="radio" name="size" class="radioGrp" value ="Large"/> Large
<br/>
<input type="radio" name="shape" class="radioGrp" value="circle"/>circle
<input type="radio" name="shape" class="radioGrp" value="square"/>square
<input type='button' id="Btn" />
function getValues(){
var values = [];
var radios = document.getElementsByClassName("radioGrp");
console.log(radios);
for(var x = 0; x < radios.length; x++){
if(radios[x].type == "radio" && radios[x].checked){
values[radios[x].name] = (radios[x].value);
}
}
return values;
}
$("#Btn").click(function() {
var x = getValues();
alert(x["color"]);
alert(x["size"]);
alert(x["shape"]);
for(var prop in x ){
alert( prop + " is " + x[prop] );
}
});
您不能将$ .each用于asscioate数组以获取更多详细信息http://bugs.jquery.com/ticket/4319
答案 2 :(得分:0)
请使用以下代码:
function getValues(){
var values = [];
for(var x = 0; x < radios.length; x++){
if(radios[x].type == "radio" && radios[x].checked){
var tmp={};
tmp[radios[x].name]=radios[x].value;
values.push(tmp);
}
}
return values;
}
$( "#Btn" ).click(function() {
var x = getValues();
$.each(x, function(k, v) {
//display the key and value pair
alert(k + ' is ' + v);
});
答案 3 :(得分:0)
下面的示例代码将所有选中的复选框作为数组
// A function that return an array with the selected items
function getSelected() {
var selected = [];
var checkboxes = $('input[type=checkbox]:checked');
for(var i = 0; i < checkboxes.length; i++){
if(checkboxes[i].checked){
selected.push(checkboxes[i].value);
}
}
return selected;
}
请注意,这与jQuery一起工作。
答案 4 :(得分:0)
您的代码可能符合以下要求:
<script>
function getValues() {
var values={};
var inputs = document.getElementsByTagName("input");
console.log(inputs);
for (var i=0;i<inputs.length;++i)
if (inputs[i].type==="radio" && inputs[i].checked)
values[inputs[i].name]=inputs[i].value;
console.log(values);
}
</script>
<button onclick="getValues()">Hit me</button>
我知道这不是jQuery - 但你应该能够转换它:)
这将创建一个对象,您可以从中按正确的顺序选择键值对:
[ values.color||"default", values.size||"default", values.shape||"default" ]