Autor Zpráva
voldik
Profil *
ahoj,mam tu problem z vracením vygenerovaneno kodu do id="text". Ajax mi v succesu vrati pozadovany kod avsak IE8 se zobrazi puvodni prazdny formular. Ve FF a IE10 ale vse probehne ok. Ukazka. Uz nevim co stim. Dik

<script>
function uloz(){
    if ($("#pri").valid()){
       var data= 'action=uloz_pris&text='+$('#te').val();
       $('input').each(function(){
          data= data+ '&'+$(this).attr('id')+'='+$(this).val();
       });
       $.ajax({
          type: "POST",
          url: "./akce.php",
          cache: false,
          data: data,
         success: function( msg){
alert(msg);
            $("#text").html(msg);
         }
       });
    }
  return false;
}
$(document).ready(function(){
    $("#soucet").focus();
   $("#pri").validate({
          rules: {
           te:{required: true},
            soucet:{required: true}
        }
   });
});
</script>
quatzael
Profil
voldik:
Zkontroluj si, jestli máš v HTML kódu správně identifikátory. Tedy žádné duplicity.
voldik
Profil *
quatzael:
to jsem samozřejmě před odesláním dotazu udělal. v kodu je pouze
. 
.
      <div id="text_obal">
         <div id="text">
.
.         
změním-li text (všude) např. na aatext je výsledek nulový, není v IE8 nějaká chybka?
quatzael
Profil
voldik:
A máš tam všechny ty tagy správně uzavřený??
Chamurappi
Profil
Reaguji na quatzaela:
Vidíš v odkázané ukázce někde duplicitní id? Nebo špatně uzavřené elementy?
Duplicitní ídéčka by mohla způsobovat zmiňovanou nekompatibilitu? Nevěřím, ukaž.


Reaguji na voldika:
Příště dej prosím odkaz přímo na ukázku problému, případně i nějak izolovanou.
Moc nerozumím tomu, proč chceš vůbec ten formulář odesílat AJAXem a proč ho děláš záměrně tak, aby bez zapnutého JavaScriptu nefungoval. Proč používáš id místo name?

Tipnul bych si, že potíž může způsobovat <input type='hidden' id='id' value='26'> v kombinaci s přemoudřelostí jQuery. Zkus změnit id tohoto elementu na něco jiného než "id". Pokud to nepomůže, připrav nějakou ukázku, která nic nikam neukládá.

avsak IE8 se zobrazi puvodni prazdny formular
Co to znamená? Nespustí se uloz? Nebo dojde uvnitř uloz k chybě? To by se poznalo tak, že bys na její konec dal alert.
voldik
Profil *
Chamurappi:
Ajax používám pro ošetření záměrného stisku F5. Po odeslání a načtení požadovaného kodu bu mohl uzivatel x-krát stisknout f5 a x-krát tim uložit to samé do db.

<input type='hidden' id='id' value='74'> používám běžnně - data se odešlo ok v php je taky ok

uloz probehne, je ale zajimeve, ze uz validate() je nepovsimnuto.

Jeste poznamka: data se ulozi spravne.

Ziva ukazka http://www.mathilda.cz/blog/?f=main&action=pris&blog_id=35&id=25&urov=0

Kod ukazky nasleduje

<!DOCTYPE html  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">

<head>
    <meta name="description" content="Stránky občanského sdružení Mathilda - sdružení na podporu lidí s těžkým zrakovým postižením" />
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
   <meta name="keywords" content="mathilda,organizace,nevidomý,nadace,nezisková,nostitzová,občanské,sdružení,zrakové,postižení" />
   <meta name="copyright" content="&copy; 2010, Volák" />
   <meta name="robots" content="all, follow" lang="cs" />
   <meta name="googlebot" content="index,follow,snippet,archive" />
   <meta name="author" content="Pavel Volák, www.sovo.cz" />
   <title>Mathilda o.s.</title>
   <link rel="stylesheet" type="text/css" href="../styles/index.css" media="all" />
   <link rel="stylesheet" type="text/css" href="./blog.css" media="all" />
   <link rel="shortcut icon" href="../img/pico.ico" />
<!--[if IE]>
      <link type="text/css" rel="stylesheet" href="../styles/indexIE.css" media="all" />
<![endif]-->
<!--[if IE 8]>
      <link type="text/css" rel="stylesheet" href="../styles/indexIE8.css" media="all" />
<![endif]-->
   <script src="../js/jquery-1.7.2.js"></script>
   <script src="../js/jquery.validate.js"></script>
   <script src="../js/messages_cs.js"></script>
   <script src="../js/mail.js"></script>

</head>

<body>
   <div id="hlavni">
      <div id="left">
         <img id="ilogo" src="../img/Mathilda-blue.png" alt="logo Mathilda o.s." />
            <ul class="menu"><li><a href="../index.php" title="Aktuality">Aktuality</a></li><li><a href="../kalen.php" title="Kalendář 2013">Kalendář 2013</a></li><li><a href="../onas.php" title="O nás">O nás</a></li><li><a href="../patron.php" title="Patronka">Patronka</a></li><li><a href="../hleda.php" title="Hledáme podporu">Hledáme podporu</a></li><li><a href="../projek.php" title="Projekty">Projekty</a></li><li><a href="../casop.php" title="Časopis">Časopis</a></li><li><a href="../podpor.php" title="Podpořili nás">Podpořili nás</a></li><li><a href="../foto.php" title="Fotogalerie">Fotogalerie</a></li><li><a href="../kontakt.php" title="Kontakt">Kontakt</a></li><li><a href="../dopor.php" title="Doporučujeme">Doporučujeme</a></li><li><a href="../blog" title="Blog">Blog</a></li></ul>
        </div>
        <div id="pomah">
            <img id="ipomah" src="../img/pom.gif" alt="pomáháme pomáhat" />
      </div>
      <div id="text_obal">
         <div id="text">
             <a class="tlacitko" href="?f=main" title="Seznam blogů">Seznam blogů</a>
                <a class="tlacitko" href="?f=uzivatel" title="Seznam uživatelů">Seznam uživatelů</a>
                <div class="clear"></div>
                <p>
               <form id='pri' name='pri' method='post' onsubmit='return uloz();'>
                   <input type='hidden' id='f' value='main'>
                   <input type='hidden' id='id' value='74'>
                   <input type='hidden' id='urov' value=2>
                   <input type='hidden' id='blog_id' value=37>
                   <input type='hidden' id='sum' value=18>
                    <label for='soucet'>Zadejte výsledek: 8 + 10</label>
                   <input id='soucet' name='soucet' size='3' maxlength='3' value='' autocomplete='off'>
                   <label for='te'>Text příspěvku</label>
                   <textarea id='te' name='te'cols='50'rows='6'></textarea>
                    </p>
                    <input type='submit' value='Odeslat příspěvěk'>
              </form>
         </div>
         <div id="pravo">
                <ul class="blogmenu">       <li><a href='index.php?f=regi&action=prihlas' title='Registrovat'>Registrovat</a></li>
                   <li><a href='index.php?f=prihlas&action=prihlas' title='Přihlásit'>Přihlásit</a></li>
                </ul>
            </div>
      </div>
      <div class="clear"></div>
      <div id="footer">
         2010&nbsp;-&nbsp;2013&nbsp; &copy;mathilda.cz&nbsp;&nbsp;&nbsp;&nbsp;design: <a href="http://www.robertnovak.cz">Robert V. Novák</a>&nbsp;&nbsp;&nbsp;&nbsp;zpracování: <a href="http://www.sovo.cz" title="Webmaster">sovo.cz</a>&nbsp;&nbsp;&nbsp;&nbsp;
        </div>
   </div>

            <script>
                function uloz(){
                    if ($("#pri").valid()){
                       var data= 'action=uloz_pris&text='+$('#te').val();
                       $('input').each(function(){
                          data= data+ '&'+$(this).attr('id')+'='+$(this).val();
                       });
                       $.ajax({
                          type: "POST",
                          url: "./akce.php",
                          cache: false,
                          data: data,
                         success: function( msg){
                alert(msg);  //tady se zobrazi spravny kod
                            $("#text").html(msg);
                         }
                       });
                    }
                      return false;
                }
                $(document).ready(function(){
                    $("#soucet").focus();
                   $("#pri").validate({
                          rules: {
                           te:{required: true},
                            soucet:{required: true}
                        }
                   });
                });
            </script>

</body>
</html>
_es
Profil
voldik:
<input type='hidden' id='id' value='74'> používám běžnně
No tak to nepoužívaj, je to zlý nápad. Zmeniť hodnotu toho id atribútu podľa rady si už vyskúšal?

Po odeslání a načtení požadovaného kodu bu mohl uzivatel x-krát stisknout f5 a x-krát tim uložit to samé do db.
Prečo to nekontroluješ na serveri?
Chamurappi
Profil
Reaguji na voldika:
Ajax používám pro ošetření záměrného stisku F5.
Ale to se přeci takhle nedělá. Většina webů to řeší tak, že po odeslání POSTu přesměruje na obyčejný GET. Tvůj postup je oproti tomu velmi krkolomný.

Mimochodem, nemáš vyřešenou situaci, kdy někdo zkusí vložit text s ampersandem — uživatelský vstup dáváš do POSTem posílaných dat bez jakéhokoliv ošetření.

je ale zajimeve, ze uz validate() je nepovsimnuto
Když přijde negativní odpověď ze serveru, tak smažeš celý formulář a nahradíš ho zbrusu novým formulářem, který nemá nastavené události, které nastavuje validate — tohle bude zlobit ve všech prohlížečích.
Co se Exploreru 8 týče, tipnul bych si, že je chyba někde uvnitř té funkce validate — že nějakým způsobem přiměje prohlížeč k tomu, aby formulář odeslal obyčejným způsobem. Momentálně nemám čas to blíže zkoumat, vypadá to na zajímavý problém, ale na tvém místě bych se mu vyhnul tím, že bych přestal používat AJAX.
voldik
Profil *
_es:
ano, zkousel jsem <input type='hidden' id='pid' value='<?php echo $id;?>'> - vysledek stejny. Na serveru samozrejme je test take, z duvodu nezapnuteho js


[#8] Chamurappi
jasne, ted mi docvaklo, neni-li zapnut js je cely ajax na nic

nicmene

Chamurappi:
Když přijde negativní odpověď ze serveru, tak smažeš celý formulář a nahradíš ho zbrusu novým formulářem, který nemá nastavené události, které nastavuje validate — tohle bude zlobit ve všech prohlížečích.

domnivam se, ze po obdrzeni negativni odpovedi by se mel vygenerovat ten samy FORM, ktery pri onsubmit vyvola fc, kde je jest na validitu. Nebo tomu tak neni???
_es
Profil
voldik:
V kóde máš chybu:
<textarea id='te' name='te'cols='50'rows='6'></textarea>
Chýbajúce medzery medzi atribútmi. Možno je príčinou problémov to.
Chamurappi
Profil
Reaguji na voldika:
ted mi docvaklo, neni-li zapnut js je cely ajax na nic
I když je JS zapnutý, tak mi to připadá zbytečně složité. Proč to neuděláš tím přesměrováním?

by se mel vygenerovat ten samy FORM, ktery pri onsubmit vyvola fc, kde je jest na validitu
To ano, funkce se zavolá, protože je tam přímo zmíněna v atributu onsubmit. Ale to, co nastavíš při načtení stránky v $(document).ready, se nastaví původnímu formuláři $("#pri"), který při $("#text").html(msg) zanikne. Vznikne nový formulář se stejným id a na tom už nic nezavolá $("#pri").validate({ … }). Nevím, jestli to opravdu něčemu vadí, nevím, jak přesně ty funkce valid a validate fungují…


Reaguji na _es:
Chýbajúce medzery medzi atribútmi.
To prohlížečům nevadí. Tuším, že i podle HTML 4 to bylo správně…

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: