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 に答える