2011-03-03 86 views
0

我使用一個對象來檢查一組單選按鈕是否具有像「規則」對象上設置的精確值。這裏有一個例子:js對象問題

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

你可以把第二個c鍵改成d嗎? – Orbit 2011-03-03 15:17:42

+0

不,我很抱歉c是可能假定值1或2的廣播名稱:-( – haltman 2011-03-03 15:19:11

回答

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; 
} 
+0

@Eric:感謝您的回答我是否修改我的for循環得到c值或不是? – haltman 2011-03-03 15:39:26

+0

@haltman:不,你的代碼的其餘部分應該按原樣正常工作 – 2011-03-03 15:40:47

+0

我在IE中得到這行錯誤:typeof arr [k]!=='undefined'&&包含(arr [k],arr2 [k]) 你有一些想法來解決它? – haltman 2011-04-29 12:44:16

0

對於命名相同的對象,不能有兩個屬性。因此,當JavaScript的編譯器看到線arr = {a:"1", b:"1", c:"1", c:"2"};它自動改變爲arr = {a:"1", b:"1", c:"2"};讓c最後定義覆蓋第一個

+0

可以使數組中的c和我的現有對象中的concat可以工作嗎? – haltman 2011-03-03 15:20:46