Изменение языка пользователя не работает в Chrome - PullRequest
1 голос
/ 11 июня 2011

У меня есть выпадающий список, что когда пользователь нажимает на язык в нем, он вызывает функцию js, чтобы изменить локаль, он отлично работает в Firefox, но в Chrome он не работает вообще, я не знаю, почему

список:

<select name="languageMenu" >
    <option selected="selected" ><fmt:message key="language.languages" /></option>
    <option value="en" onclick="switchLocale('en');"><fmt:message key="language.English"/></option>
    <option value="ar" onclick="switchLocale('ar');" ><fmt:message key="language.Arabic"/></option>
</select>

js:

<script type="text/javascript">

    function switchLocale(lang_opt) {
        var selected = lang_opt.selectedIndex;
        //var locale = lang_opt.options[selected].value;
        var locale = lang_opt;

        var href = document.location.href;
        if (href[href.length - 1] === "#") {
            href = href.substr(0, href.length - 1); // -1 removes "#"
        }
        var newHref = "";
        if (document.location.search.length > 0) {
            var langParamIndex = href.indexOf("lang");
            if (langParamIndex > -1) {
                newHref = href.substr(0, langParamIndex);
                newHref += "lang=" + locale;
                newHref += href.substr(langParamIndex + "lang=zz".length);
            } else {
                newHref = href + "&lang=" + locale;
            }
        } else {
            newHref = href + "?lang=" + locale;
        }
        document.location = newHref;
    }  
</script>

1 Ответ

2 голосов
/ 11 июня 2011

Использование обработчика onclick для отдельных опций не является четко определенным поведением, вы должны изменить событие на onchange самого поля выбора:

<select name="languageMenu" onchange="switchLocale(this.value)"> 
    <option selected="selected"><fmt:message key="language.languages" /></option>
    <option value="en"><fmt:message key="language.English"/></option>
    <option value="ar"><fmt:message key="language.Arabic"/></option>
</select>

Для опций также должен быть выбран язык по умолчаниюпоэтому я не могу запустить onchange, когда выбираю тот же язык, который я использую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...