JS объектная проблема - PullRequest
       3

JS объектная проблема

0 голосов
/ 03 марта 2011

Я использую объект, чтобы проверить, что группа переключателей имеет точное значение, подобное установленному для объекта "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", я получаю последнее значение (1), а не правильное значение, как это может быть 1 или 2

спасибо заранее

чао, ч.

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

Чтобы иметь более одного значения, свойство 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 голосов
/ 03 марта 2011

Вы не можете иметь два свойства объекта с одинаковыми именами. Таким образом, когда компилятор javascript видит строку arr = {a:"1", b:"1", c:"1", c:"2"};, он автоматически меняет ее на arr = {a:"1", b:"1", c:"2"};, позволяя последнему определению c перезаписать первое

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...