0

私はローカライズに取り組んでおり、cookie を使用して言語を保存しています。私は持っていSelectます:

var select = new dijit.form.Select({
    name: "languageSelect",
    onChange: function (value) {
        changeLanguage(value);
    }
}, "languageSelect");

onChangeイベントでは、メソッドを呼び出しますchangeLanguage:

 var changeLanguage = function (language) {
    $.ajax({
        type: "PUT",
        url: "/api/accounts/changelanguage?language=" + language,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            window.location.reload(false);
        }
    });
};

このメソッドは、サーバーへの ajax 呼び出しを行い、ページを再読み込みします。

問題は、ページの読み込み時に、languageユーザーが以前に選択した Cookie を読み取り、次のように設定する必要があることSelectです。

select.set("value", readCookie("language"));

しかし、これsetによりイベントがOnChange発生し、最初は望ましくないページの再読み込みが発生します。以下のような 1 つのフラグを使用しようとしましたが、うまくいきません。

var select = new dijit.form.Select({
    name: "languageSelect",
    style: { width: '200px' },
    onChange: function (value) {
        if (isLoading == false)
            changeLanguage(value);
    }
}, "languageSelect");

var isLoading = true;
select.set("value", readCookie("language"));
isLoading = false;

とにかくそれを整理することはありますか、私はメソッドでイベントOnChangeの発火を防ぐことを考えsetていましたが、それを行う方法を見つけていません.

4

1 に答える 1

9

次のように追加してみてくださいfalse

select.set("value", readCookie("language"));

select.set("value", readCookie("language"), false);

falseイベントset()を防ぐメソッドの最後にフラグを立てます。onChange

于 2013-02-28T04:51:39.587 に答える