2016-05-20 6 views
-1

Я пытаюсь нажать data значение атрибута в параметр массива, но он выдает указанную выше ошибку в строке параметр [parent] .push (parent);Невозможно прочитать свойство 'push' of undefined

var parameter = {}; 

var currentTabSelected = ""; 
var parent = ""; 

$("#categories").on("click", ":checkbox", function() { 
    if($(this).is(":checked")) { 
     parent = $(this).data("parent"); 
     console.log(parent) 

     if (!(currentTabSelected in parameter)) { 
      parameter[currentTabSelected] = [] 
     } 

     var found = $.inArray($(this).val(), parameter[currentTabSelected]) > -1; 

     if (!found) { 
      parameter[currentTabSelected].push($(this).val()); 
      parameter[parent].push(parent); 
      console.log(parameter) 
     } 
    } else { 
     var index = parameter[currentTabSelected].indexOf($(this).val()); 
     var parent_index = parameter[parent].indexOf(parent) 

     if (index > -1) { 
      parameter[currentTabSelected].splice(index, 1); 
      parameter[parent].splice(parent_index , 1); 
     } 
    } 
}) 

Что я могу сделать для преодоления вышеуказанной проблемы?

+2

Где находится 'parameter' array? –

+0

где задан параметр? – Thorin

+0

Замечание: для внутреннего '()' здесь нет необходимости: 'if (! (Found)) {' Just 'if (! Found)' семантически идентичен и более типичен. –

ответ

2

Если параметр объект, вы должны создать ключи перед их использованием. Вы пытаетесь получить доступ к ключу в параметре.

Например, убедитесь, что ваш объект содержитcurrentTabSelected и parent:

parameter[currentTabSelected] = [] 
parameter[parent] = [] 

После инициализации currentTabSelected и parent вы можете выполнить операцию по parameter[currentTabSelected], parameter[parent].

+0

Спасибо, что он был изменен P2 –

+0

Случайный * курсив * не * много * лучше. :-) –

-1

Я пострадал от той же проблемы несколько дней назад, решение напрямую связано с ключевым словом «this». Ваше «это» относится к другой области, в которой ваша переменная не является частью. Возможно, вы захотите сделать

var that=this; 

Или, если вам удобно с ES6, вы можете использовать синтаксис функции стрелки.

+0

Нет, они правильно используют 'this'. Он задается jQuery, чтобы ссылаться на элемент, на который нажимается событие click. –

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