$ .getJSON触发器选择更改事件

时间:2012-04-18 11:48:36

标签: javascript jquery

我正在尝试使用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));
        });
    });
}

感谢所有帮助!

1 个答案:

答案 0 :(得分:2)

这一行:

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

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

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

这样你实际上是将一个函数传递给.change(),它应该可以工作。