NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Údaj string ve funkci nefunguje

V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Lukáš Veselý:28.3.2020 16:47

Čau lidi, na svém provizorním webu zatím mám výběr jazyka a jeho výpis, nyní jsem přidal i text ve speciální funkci a chci ho vypsat.
A to se děje v

var write_text = find_write_text_id.innerHTML = select_lang.actual_lang.welcome;

. Jenže je zde nějaký problém.
Příslušný text se s přítomností actual_lang nevypíše. Když místo něj však dosadím CS nebo EN, text v příslušném jazyce se napíše. Actual_lang přitom má vždy hodnotu CS nebo EN, z toho mi vyplývá, že ta funkce mi nebere actual_lang jako string. Mohu actual_link konvertovat na něco v čemž už bude moci pracovat?
Scriptu v body si nemusíte všímat, je to nastavení automatického jazyka.Vše důležité je ve druhém scriptu.

Díky

<html>
 <head>

<script>
    var select_lang={
        EN:{
            welcome: "Welcome everyone!"
            },
        CS:{
            welcome: "Vítejte všichni!"
            }
    };
</script>

<script>
   function changeFunc() {
    var actual_lang = document.getElementById("selectBox").value;
    var find_id_lang_here = document.getElementById("lang_here");
  var write_actual_lang = find_id_lang_here.innerHTML = actual_lang;



    var find_write_text_id = document.getElementById("text_here");
    var write_text = find_write_text_id.innerHTML = select_lang.actual_lang.welcome;
    //actual lang se správně vypíše (EN/CS) ale příslušný text se nezobrazí.
    //Když však místo actual_lang zadám EN nebo CS, text je v pořídku
    //actual_lang přitom má vždy hodnotu jednoho nebo druhého, takže funkce asi neumí vzít hodnotu stringu.


   }
</script>

</head>
    <body>

       <p id="lang_here"></p>
       <p id="text_here"></p>


        <script>
          var autolang = "EN";
          var find_id_lang_here = document.getElementById("lang_here");
          var write_auto_lang = find_id_lang_here.innerHTML = autolang;

            find_write_text_id = document.getElementById("text_here");
            find_write_text_id.innerHTML = select_lang.auto_lang.welcome;
      </script>


      <select id="selectBox" onchange="changeFunc();">
        <option value="EN">English</option>
        <option value="CS">Czech</option>
      </select>

    </body>
</html>
 
Odpovědět
28.3.2020 16:47
Avatar
Neaktivní uživatel:28.3.2020 18:19

Ahoj, si hledáš následující syntaxi:

var write_text = find_write_text_id.innerHTML = select_lang[actual_lang].welcome;

A tady to máš v praxi https://jsfiddle.net/bgw4sv2z/

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
28.3.2020 18:19
Neaktivní uživatelský účet
Avatar
Lukáš Veselý:28.3.2020 18:35

Díky, to je ono. No a jak se to vlastně jmenuje, jaká je to teď proměnná?

 
Nahoru Odpovědět
28.3.2020 18:35
Avatar
Odpovídá na Lukáš Veselý
Neaktivní uživatel:28.3.2020 18:51

Typově se nic nemění actual_lang je pořád string a select_lang[ac­tual_lang] je pořád objekt. Je to jen jiný typ zápisu umožňující použít proměnnou jako klíč.

Nahoru Odpovědět
28.3.2020 18:51
Neaktivní uživatelský účet
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:28.3.2020 19:02
var actual_lang = document.getElementById("selectBox").value;
select_lang.actual_lang.welcome;

select_lang - je pole {}
actual_lang - je promenna typu string (select.value)

    var select_lang={
        EN:{
            welcome: "Welcome everyone!"
            },
        CS:{
            welcome: "Vítejte všichni!"
            }
    };
//select_lang.actual_lang.welcome
select_lang.CZ.welcome - cz je v tomto pripade pointer, ktery vytvoril javascript pro zjednoduseni zapisu
select_lang.EN.welcome
select_lang['CZ'].welcome
select_lang['EN'].welcome

select_lang.actual_lang.welcome
// tento zapis by odpovidat strukture pole takoveto:
    var select_lang={
        actual_lang:{
            welcome: "Welcome everyone!"
            }
    };
// nebo
select_lang = {}
select_lang.actual_lang = {}
select_lang.actual_lang.welcome = {}
// nebo
select_lang = {'actual_lang' : {'welcome': 'xxx'}};
// ono je to dost matouci, protoze to jde napsat i takto
select_lang = {actual_lang : {welcome: 'xxx'}};
// nebo
function xxx()
{
this.actual_lang = {welcome: 'aaa'};
}
select_lang = new xxx;
alert(select_lang.actual_lang.welcome)

//Ale schvalne si to zkus napsat takto:
// ono je to dost matouci, protoze to jde napsat i takto
select_lang = {actual_lang : {welcome: 'xxx'}};
alert(select_lang.actual_lang.welcome)
actual_lang = 'aaa';
select_lang = {actual_lang : {welcome: 'yyy'}};
alert(select_lang.actual_lang.welcome)
alert(select_lang.aaa.welcome)
alert(select_lang[actual_lang].welcome)
 
Nahoru Odpovědět
28.3.2020 19:02
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:28.3.2020 19:05

Mozna, ze to pujde, mozna ne. Kdyby to neslo, tak lze pouzit zapis se zavorkami, pro pole, protoze se ti to nekdy muze hodit. Js dela aliasy, pointery, kdyz je to undefined, ale nemel by delat, kdyz to neni undefined.

//select_lang = {actual_lang : {welcome: 'yyy'}};
select_lang = {};
select_lang[actual_lang] = {welcome: 'yyy'};
 
Nahoru Odpovědět
28.3.2020 19:05
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.