Autor Zpráva
Ratimor
Profil *
Ahoj, zkusím popsat co nejpřesněji problém který se u mě na stránkách vyskytuje
tato fce je navázána na onLoad u prvku <body>
function poNacteni()
{
  if (document.formular.pozice !== null && document.formular.pozice.value !== "none")
  {
    document.location.href = self.location.href + "#" + document.formular.pozice.value;
  }
   alert("s");
  if (document.getElementById('sablonyHidden').value == "ne" || document.getElementById('sablonyHidden').value == "ano")
  {
    document.getElementById('sablonyHidden').value = "ne";
    if (document.getElementById('sablony')!== null)
      document.getElementById('sablony').value = "+ šablony";
    if (document.getElementById('sablonyDiv')!== null)
      document.getElementById('sablonyDiv').style.display = "none";
  }
  else if (document.getElementById('sablonyHidden').value == "anoo")
  {
    document.getElementById('sablonyHidden').value = "anoo";
    if (document.getElementById('sablony')!== null)
      document.getElementById('sablony').value = "- šablony";
    if (document.getElementById('sablonyDiv')!== null)
      document.getElementById('sablonyDiv').style.display = "";
  }                           
  if (document.getElementById('zmenaSkupiny') !== null)
  {
    document.getElementById('zmenaSkupiny').value = "ne";
  }
  if (document.getElementById('submit_ulozit_hlasovani') !== null)
  {
    document.getElementById('submit_ulozit_hlasovani').style.display = "none";
  }
 
}

problém je v tom, když neexistuje prvek pozice(před alertem), což je input type hidden, pak se zbytek funkce neprovede(ani ten alert) mohli byste mi prosím zkusit poradit, jak jinak, lépe otestovat existenci toho hiddenu, aby se ten zbývající JS provedl? Popřípadě, kdyby někdo viděl nějaké další chyby, klidně může přispět do diskuze, v JS nejsem příliž zběhlý :)
kdyby někomu přišlo vysvětlení nedostatečné, rád upřesním
díky Ondra
Joker
Profil
Ratimor:
se zbytek funkce neprovede(ani ten alert)
Když se něco takového stane (= zjevně skript předčasně skončí), nejspíš to je kvůli tomu, že ve skriptu nastala nějaká chyba -> otevřete výpis JS chyb a zkontrolujte.

V tomhle případě je problém tady:
if (document.formular.pozice !== null && document.formular.pozice.value !== "none")
Hodnota neexistujícího prvku totiž není null, ale undefined. A protože používáte "striktní porovnání" operátorem identity (===, resp. jeho negací !==), přes tu podmínku to projde (protože undefined !== null platí) a na document.formular.pozice.value to pak spadne, protože undefined nemá vlastnost value.

Řešení:
1. Místo document.formular.pozice !== null použít document.formular.pozice !== undefined
2. Místo operátoru identity použít operátor porovnání: document.formular.pozice != undefined, tady už by dokonce fungoval i null (protože zatímco pro operátor identity neplatí, že null === undefined, s operátorem porovnání null == undefined platí)
3. Podle mě nejjednodušší a nejlepší řešení, jednoduše testujte, jestli se objekt vyhodnotí jako true.
if (document.formular.pozice && document.formular.pozice.value !== "none")
Ratimor
Profil *
mm, pěkně vysvětlený, děkuju :)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: