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));
        });
    });
}

感谢所有帮助!

4

1 回答 1

2

这一行:

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

将调用结果传递categoryHelper.loadLevel2($control.val()).change(); 如果这不是一个函数,那么您将不会向元素添加事件处理程序,而是触发任何已经绑定的事件处理程序。将其更改为:

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

这样您实际上是在将函数传递给.change(),并且它应该可以工作。

于 2012-04-18T11:55:28.357 回答