2012-04-18 6 views
0

Я пытаюсь добавить категории в выпадающий список, используя jQuery Ajax. Когда выбрана опция, я хотел бы загрузить подкатегории.

Проблема, с которой я сталкиваюсь, заключается в том, что добавление опций в раскрывающийся список функцией Ajax, похоже, также вызывает событие изменения. Как я могу избежать этого или переписать мой код лучше, чтобы избежать такого поведения?

Вот мой код:

categoryHelper.loadLevel1 = function() { 

    // The control that needs to be filled with categories 
    var $control = $("#select1"); 

    // This function runs $.getJSON() and fills the drop down list 
    // with option elements 
    fillDropDown(url, null, $control); 

    // When I select a value I want to run the function loadLevel2 which 
    // takes the currently selected value from level 1 as parameter 
    $control.change(categoryHelper.loadLevel2($control.val())); 
}; 

Код для fillDropDown:

function fillDropDown(url, parameters, dropdown) { 
///  all data has been loaded</param> 
    $.getJSON(url, parameters, function (data) { 
     $(dropdown).empty(); 
     $(dropdown).append(createOption("", "")); 
     $(data).each(function() { 
      $(dropdown).append(createOption(this.value, this.text)); 
     }); 
    }); 
} 

Вся помощь ценится!

ответ

2

Эта линия:

$control.change(categoryHelper.loadLevel2($control.val())); 

пройдет результат вызова categoryHelper.loadLevel2($control.val()) к .change(); если это не функция, то вы не собираетесь добавлять обработчик события к элементу, а вместо этого запускаете любые обработчики событий, которые уже связаны. Измените его на:

$control.change(function() {categoryHelper.loadLevel2($control.val())}); 

так, что вы на самом деле проходит функцию .change(), и он должен работать.

+0

Спасибо, что решила проблему. :-) – Aetherix