Autor Zpráva
BigBear
Profil
Ahojte, potřebuji formulář odeslat přes obrázek, ale nechci mít v url souřadnice kliknutí. Nemohu tedy použít input typu image. Použil jsem proto obrázek a na onclick sem dal submit toho formuláře. Formulář ale potřebuji nějak kontrolovat, takže na událost formuláře onsubmit jsem dal kontrolu. Proč mi ale nefunguje to, co by (dle mě) principielně mělo fungovat správně? Koukněte prosím na kód a vysvětlete mi, proč nefunguje ten první případ (označím je):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
    <script type="text/javascript">
      function checkSearchSubmit() {
        var searched = document.search.vyraz.value;
        if (searched == 'hledat ...' || searched.length < 3) {
          alert('Musíte zadat minimálně tři znaky.');
          return false;
        }

        return true;
      }
    </script>
  </head>
  <body>
    <form name="search" class="search" action="vyhledavani.php" method="get" onsubmit="return checkSearchSubmit();">
      <input type="text" name="vyraz" value="hledat ..." onfocus="this.value = '';" onblur="if(!this.value) { this.value = 'hledat ...'; }" />

      <!-- následující nefunguje a já nechápu proč - právě tento případ bych chtěl vysvětlit (vždyť tam je submit a formulář má nastavenu událost onsubmit) -->
      <img class="search" src="images/search.png" alt="search" title="Hledat" onclick="document.search.submit();" />
      
      <!-- následující na kliknutí funguje přesně tak, jak má -->
      <img class="search" src="images/search.png" alt="search" title="Hledat" onclick="if (checkSearchSubmit()) { document.search.submit(); }" />
      <!-- toto funguje také přesně tak, jak má - je to nastylováno s absolutním pozicováním mimo dokument a je to kvůli odeslání formuláře pomocí enteru -->
      <input class="submit" type="submit" />
    </form>
  </body>
</html>

Dík moc, mějte se :-).
Chamurappi
Profil
Reaguji na BigBeara:
Proč mi ale nefunguje to, co by (dle mě) principielně mělo fungovat správně?
Protože zavolání metody submit nevyvolává událost onsubmit. Je to tak nejspíš proto, abys mohl při kontrole zbrzdit odeslání a později ho zase vyvolat, aniž by se procházela znovu kontrola. Tvá situace je méně obvyklá.

ale nechci mít v url souřadnice kliknutí
… a divná. Čemu ty souřadnice vadí?
Proč si nenastyluješ klasické odesílací tlačítko, aby vypadalo tak, jak chceš? Dělat kvůli tomu funkčnost závislou na JavaScriptu mi nepřipadá rozumné.
BigBear
Profil
Nemyslím si, že to je divné, ale souhlasím, že není-li to standardní situace a jde-li ji vyřešit jinak, je nutné to provést. Za obě odpovědi tedy děkuji a odpovím na tvoji druhou otázku. Myslím, že je to v url prostě ošklivé a to je pro mě dostačující důvod k tomu, aby tam vadily (samozřejmě tento názor nikomu nenutím a vím, že s tím spousta lidí nebude souhlasit). Funkčnosti samozřejmě nevadí, ale zákazník si takových blbostí všimne a pak se ptá: "a proč je tam tohle a onohle?". Na větších webech to není problém vyřešit i jinak za pomocí htaccess atd., ale teď to potřebuji udělat tímto způsobem a tak to řeším, jak umím. Každopádně ještě jednou děkuji :-)
Chamurappi
Profil
Reaguji na BigBeara:
Zákazník, který rozumí adrese, by měl rozumět tomu, že formulářové parametry navíc v podstatě nevadí.

tak to řeším, jak umím
Nastylovat klasické odesílací tlačítko tak, aby nevypadalo jako tlačítko, není moc těžké.

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: