我使用一个对象来检查一组单选按钮是否具有像“rule”对象上设置的精确值。这是一个例子:
arr = {a:"1", b:"1", c:"1", c:"2"}; //that's my object rule
var arr2={}; //here I create my second array with charged value
$("#form_cont input:checked").each(function()
{
arr2[$(this).attr("name")]=$(this).val();
});
//here I make the check
for (k in arr2)
{
if (typeof arr[k] !== 'undefined' && arr[k] === arr2[k])
{
$("#form_cont li[name$='"+k+"']").css('background-color', '');
}
else
{
$("#form_cont li[name$='"+k+"']").css('background-color', 'pink');
}
}
问题是,当我必须检查“c”键时,我得到最后一个(2)而不是正确的值,这可能是e 1还是2
提前致谢
ciao,h。
答案 0 :(得分:2)
为了拥有多个值,arr
的属性c
将需要是一个数组:
arr = {a:["1"], b:["1"], c:["1","2"]}; //that's my object rule
当然,您的有效性检查也必须更改为搜索新阵列:
typeof arr[k] !== 'undefined' && contains(arr[k], arr2[k])
...
function contains(a, obj){
for(var i = 0; i < a.length; i++) {
if(a[i] === obj){
return true;
}
}
return false;
}
答案 1 :(得分:0)
您不能在名称相同的对象上拥有两个属性。因此,当javascript编译器看到行arr = {a:"1", b:"1", c:"1", c:"2"};
时,它会自动将其更改为arr = {a:"1", b:"1", c:"2"};
,让c的最后一个定义覆盖第一个