如何防止dojo上的事件OnChange选择

cuo*_*gle 0 javascript dojo

我正在致力于本地化并使用cookie来存储语言.我有一个Select:

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

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);
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

这个方法用ajax调用服务器然后重新加载页面.

问题是:在页面加载时,我需要读取language用户之前选择的cookie 并将其设置为Select:

select.set("value", readCookie("language"));
Run Code Online (Sandbox Code Playgroud)

但是,这set会导致事件OnChange触发,然后重新加载页面,这在开始时我不想要.我尝试使用下面的一个标志,但它没有用完:

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;
Run Code Online (Sandbox Code Playgroud)

无论如何要解决它,我正在考虑防止事件OnChange触发set方法,但还没有找到如何做到这一点.

Sud*_*oti 8

尝试添加false,如:

select.set("value", readCookie("language"));
Run Code Online (Sandbox Code Playgroud)

select.set("value", readCookie("language"), false);
Run Code Online (Sandbox Code Playgroud)

false标志在set()方法结束时将阻止该onChange事件.