2013-08-10 3 views
1

Я довольно новичок в jQuery, и я не понимаю, почему этот цикл не отображает свойства объекта.Зацикливание объекта со строковым массивом

Буду Вам признателен, если вы могли бы помочь мне.

var shop_array = ["title","price","img","text"]; 
var submit = $(".add").find(":submit"); 
submit.on("click",function(e){ 
    var elements = $(".add").children(':input'); 
    for(var i=0;i<elements.length;i++){ 
     if($(elements[i]).val()!==""){ 
      var object = '\"'+shop_array[i]+'\"'; 
      console.log(shopcart.shop_values[object])//dosen't display shop_value; 
      console.log(object); 
     } 
    } 
}); 
var shopcart= { 
    shop_values :{ 
     "title":"a", 
     "price":"b", 
     "img":"img", 
     "text":"text" 
    }, 
    add: function(){ 

    } 
} 
+0

Прежде всего, «объект» - действительно плохое имя переменной и приведет к путанице. Во-вторых, вы добавляете к значению ведущие и конечные косые черты, где ни одно из значений в объекте 'shop_values' не имеет косой черты, поэтому они никогда не будут совпадать. –

ответ

0

Ваша проблема является " вы поставите вокруг переменной, которую вы хотите использовать для доступа к свойствам объекта, они не должны быть там, так как они не в именах свойств

var object = '\"'+shop_array[i]+'\"'; 
console.log(shopcart.shop_values[object])//dosen't display shop_value; 

должно быть просто

console.log(shopcart.shop_values[shop_array[i]])//dosen't display shop_value; 

для текущего кода отработал shopcart необходимо будет определить как

var shopcart= { 
    shop_values :{ 
     "\"title\"":"a", 
     "\"price\"":"b", 
     "\"img\"":"img", 
     "\"text\"":"text" 
    }, 
    add: function(){ 

    } 
} 

который выглядел бы просто ужасно.

+0

большое спасибо –

Смежные вопросы