2012-11-06 2 views
-5

Итак, у меня этот очень простой случай переключения, из локальной переменной я импортирую значение в функцию, и основной функцией является переход с французского псевдонима и возврат значения к моему javascript ...Ошибка корпуса коммутатора?

Если для по какой-то причине ALIAS на странице не фигурирует в тех случаях, когда она должна идти по умолчанию и запускать мою функцию jsbreak, однако в моем случае, даже если обнаружен псевдоним и он переключает переменную на новые значения, она по-прежнему переходит к умолчанию и выполнить код ...

function langToggle(currentAlias) { 
    switch(currentAlias) { 
    //Switch the variable from English to French and vice versa depending on the current page's URL string when the toggle js link is clicked 
     //If ENGLISH switch the variable to French 
     //If ENGLISH switch the variable to French 
     case "about-us": currentAlias = "a-notre-sujet"; break; 
     //If FRENCH switch the variable to French 
     case "a-notre-sujet": currentAlias = "about-us"; break; 
     /* -------------------------------------[ See the first two comments ]---------------------------------- */ 
     case "facilities-and-security": 
      currentAlias = "installations-et-securite"; break; 
     case "installations-et-securite": 
      currentAlias = "facilities-and-security"; break; 
     /* -------------------------------------[ See the first two comments ]---------------------------------- */ 
     case "offenders": 
      currentAlias = "delinquants"; break; 
     case "delinquants": 
      currentAlias = "offenders"; break; 
     /* -------------------------------------[ See the first two comments ]---------------------------------- */ 
     case "you-and-csc": 
      currentAlias = "scc-et-vous"; break; 
     case "scc-et-vous": 
      currentAlias = "you-and-csc"; break; 
     /* -------------------------------------[ See the first two comments ]---------------------------------- */ 
     case "connecting": 
      currentAlias = "etablir-des-liens"; break; 
     case "etablir-des-liens": 
      currentAlias = "connecting"; break; 
     /* -------------------------------------[ See the first two comments ]---------------------------------- */ 
     case "resources": 
      currentAlias = "ressources"; break; 
     case "ressources": 
      currentAlias = "resources"; break; 
     /*--------------------------------------[ See the first two comments ]---------------------------------- */ 
     case "international-transfers": 
      currentAlias = "transferements-internationaux"; break; 
     case "transferements-internationaux": 
      currentAlias = "international-transfers"; break; 
     /* -------------------------------------[ See the first two comments ]---------------------------------- */ 
     case "educational-resources": 
      currentAlias = "ressources-pedagogiques"; break; 
     case "ressources-pedagogiques": 
      currentAlias = "educational-resources"; break; 
     /* -------------------------------------[ See the first two comments ]---------------------------------- */ 
     case "cfp": 
      currentAlias = "pfc"; break; 
     case "pfc": 
      currentAlias = "cfp"; break; 
     default: alert("the no matching alias"); 
    } 
    //Return the value of the updated Alias to the language toggle script 
    return currentAlias; 
} 

это ДРУГАЯ функция вызова сценария тумблера для тех, говоря, что это может быть прослушивают?

function jsabort(){ 
    throw new Error('This is not an error. This is just to abort javascript'); 
} 
function js_changeit(){ 
    var mainName = String(window.location); 
    var dash = mainName.lastIndexOf("-"); 
    var slash = mainName.lastIndexOf("/"); 
    var dot = mainName.lastIndexOf("."); 
    var name = mainName.substring(slash+1,dot); 
    var ext = mainName.substring(dot,mainName.length); 
    var lang = name.substring(name.length-3,name.length); 
    var urlSection = mainName.split("/"); 
    var currentAlias = urlSection[3]; 
    var currentSite = urlSection[2]; 
    var urlUntilEndAlias = "http://" + currentSite + "/" + currentAlias + "/"; 
    var mainUrlSplittedAtAlias = mainName.split(urlUntilEndAlias); 
    var mainUrlSplittedAtAliasLastSlash = mainUrlSplittedAtAlias[1]; 
    if (mainName === "http://internet/index-eng.shtml" || mainName === "http://internet/index-fra.shtml") { 
     if (lang != "eng") { 
      window.open("http://" + currentSite + "/" + "index" + "-eng" + ext, "_self"); 
     } else if (lang != "fra") { 
      window.open("http://" + currentSite + "/" + "index" + "-fra" + ext, "_self"); 
     } 
    } else { 
    var lastDash = mainUrlSplittedAtAliasLastSlash.lastIndexOf("-"); 
    var subSectionUntilEndFilename = mainUrlSplittedAtAliasLastSlash.substring(0,lastDash); 
    var UpdatedAlias = langToggle(currentAlias); 
    langToggle(); 
     if (lang != "eng") { 
      window.open("http://" + currentSite + "/" + UpdatedAlias + "/" + subSectionUntilEndFilename + "-eng" + ext, "_self"); 
     } else if (lang != "fra") { 
     window.open("http://" + currentSite + "/" + UpdatedAlias + "/" + subSectionUntilEndFilename + "-fra" + ext, "_self"); 
     } 
    } 
} 
+7

выключатель сломан или ошибка в коде? Я знаю, на что я положил свои деньги ... –

+2

@MitchWheat: haha ​​- сделал мой день ... – jAndy

+4

Почему вы используете 'switch' для этого? Обычный объект, используемый в качестве карты, занимает менее половины объема кода. – Jon

ответ

0

Как @ Джон упоминается в комментариях, вы должны использовать поиск-объект, чтобы решить эту проблему:

var lookup = { 
    "about-us":  "a-notre-sujet", 
    "a-notre-sujet": "about-us", 
    "offenders":  "delinquants", 
    // ... 
}; 

var langToggle = lookup[ currentAlias ]; 

if(!langToggle) { 
    alert("the no matching alias"); 
} 
+0

Я кодировал javascript около 3 дней, спасибо за подсказку, будет пытаться это сделать. – EricSP

+0

Не работает: -/ – EricSP

+0

в целом, это утверждение не так полезно. Можете ли вы переопределить это в чем-то более точном? – jAndy

0

Я была такая же проблема (даже если в этом случае решение не следует использовать переключатель со строками, но таблица вроде этого была предложена jAndy).

Таким образом, в случае не ошибка синтаксиса или несколько промахов размещены перерывы вы должны (возможно?) Сделать что-то вроде этого:

function langToggle(currentAlias) { 
    var myKey = '' + currentAlias; 
    switch(myKey) { 
     case 'XPTO': 
      //do xpto 
      break; 
     case 'YPTO': 
      //do ypto 
      break; 
    } 
} 

В моем случае я был уверен, что я проходил строки, так это не просто преобразование аргумента в строку, а создание нового строкового объекта. Этот способ работал со мной. Я хотел бы дать лучшее объяснение, почему это работает, но у меня его нет :) Надеюсь, это поможет кому угодно.

Если кто-нибудь знает причину, пожалуйста, поделитесь!

+0

Обновление: не совсем уверен, но в моем случае это может быть связано с кодировкой JavaScript (UTF16), шаг я инициализировал переменную myKey, возможно, исправлял какой-то странный символ, который я отправлял с сервера, который я не мог «видеть» "в текстовом редакторе. На днях я сравнивал код с предыдущей версией, и я обнаружил одну из этих ситуаций. –

Смежные вопросы