简体   繁体   中英

Preserve a value of an element after change using jQuery

For internationalization support, I wrote code that changes the URL from #lang-select dropdown .The code is

$(document).ready(function(){
   var sel = document.getElementById('lang-select');
    sel.onchange = function(){window.location.replace($('#lang-select').val());};
 });

the above code works fine and it changes the URL from http://0.0.0.0:3000/fr to http://0.0.0.0:3000/en . Now I want to preserve the changed value, but without success. I have written the code below. I don't know why it is wrong/not working .

function langSelect(){
var available_languages = {
    "en":"English",
    "de":"Deutsch",
    "ru" :"Россию",
    "fr" : "Française"
};
var languageInUrl= document.URL.split("/")[3];
for(var shortLanguage in available_languages){
    if(shortLanguage === languageInUrl) {
        var langaugeOptionArray = $("#lang-select>option");
        for(var i = 0 ; langaugeOptionArray.length > i ; i++){
            if(langaugeOptionArray[i].label === available_languages[shortLanguage]){
                langaugeOptionArray[i].selected = true;
                return;
            }
        }
    }
  }
}

Please tell me what's wrong in above code and since what I am doing is not a new thing, please share what is the best practice to overcome this scenario.

Currently, I am using backend to accomplish this.

$(function() {
  $('#lang-select').on("change",function(){   
    window.location.replace($(this).val());
  }); 
});

function langSelect(){
  var available_languages = {
    "en":"English",
    "de":"Deutsch",
    "ru" :"Россию",
    "fr" : "Française"
  };
  var languageInUrl= document.URL.split("/")[3];
  var lang = available_languages[languageInUrl];
  if (lang) {
    var langaugeOptionArray = $("#lang-select>option");
    langaugeOptionArray.each(function() {
      if($(this).text() === lang){
        $("#lang-select").val(lang);
        return false;
      }
    });
  }
}

I believe we can even do

if (lang) {
  var opt = $("#lang-select").find('option[text="'+lang+'"]').val();
  if (opt) $("#lang-select").val(opt); 
}

Good luck

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM