Autor Zpráva
look23
Profil *
Zdravím,
na stránce mám několik formářů.
<form action="" method="post" onsubmit="return checkHandOverForm({id});" name="formular{id}" id="frm{id}"></form>
Odesílá se vždy jen jeden.

V javascriptu přes nově otevřené okno ukládám do hlavního okna. Na konci pak přes script odesílám konkrétní formulář přes document.getElementById("frm"+cislo).submit();, ale to způsobí, že se odešle prázdný a přitom tam ty údaje jsou.

Setkal se někdo s tím, že by se odeslal formulář bez dat nebo tam mám nějakou lamerskou chybu, kterou pořád přehlížím?
Děkuju
peta
Profil
Link na stranku?
Delas "lamerskou chybu", pravdepodobne odesilas prazdny formular, spatne zkopirovana data nebo jiny formular nebo mas formular ve formulari. Bez kodu a vstupnich dat se to neda zjistit.
look23
Profil *
Notes.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Poznámky</title>
    <script type="text/javascript">
        function Init () {
            var re_id = new RegExp('id=(\\d+)');
            var cislo = (re_id.exec(String(window.location)) ? new Number(RegExp.$1) : 0);

            var sharedObject = window.dialogArguments;

            var notes = document.getElementById ("notes");
            var notes_all = document.getElementById ("notes_all");
            notes.value = sharedObject.notes;
            notes_all.value = sharedObject.notes_all;
        }
// save dialog
        function OnOK () {
            var re_id = new RegExp('id=(\\d+)');
            var cislo = (re_id.exec(String(window.location)) ? new Number(RegExp.$1) : 0);
            var notes = document.getElementById ("notes");
            var notes_all = document.getElementById ("notes_all");

            if (window.showModalDialog) {
                var sharedObject = {};
                sharedObject.notes = notes.value;
                sharedObject.notes_all = notes_all.value;
                sharedObject.cislo = cislo;
                if( notes_all.value != '' )
                {
                  if( notes.value != '' ) info = 4;
                  else  info = 1;
                }
                else
                {
                  if( notes.value != '' ) info = 5;
                  else  info = 2;
                }

                sharedObject.info = info;

                window.returnValue = sharedObject;
            }
            else {
                    // if not modal, we cannot use the returnValue property, we need to update the opener window
                window.opener.UpdateFields (notes.value, notes_all.value, cislo, info);
            }
            window.close ();
        }
// close dialog
        function OnCancel () {
            window.close ();
        }
    </script>
<body onload="Init ();">
    Všeobecná poznámka:<br/>
    <textarea id="notes_all" rows="5" cols="25"></textarea><br/>
    Individuální poznámka:<br/>
    <textarea id="notes" rows="5" cols="25"></textarea><br/>
    <br/>
    <button onclick="OnOK ()">OK</button> <button onclick="OnCancel ()">Cancel</button>
</body>
</html>

Hlavní okno (TPL)
{literal}
    <script type="text/javascript">
        function formSubmit(cislo)
        {
            document.getElementById("frm"+cislo).submit();
        }
// z notes do edit
        function UpdateFields (newFore, newSur, cislo, info) {
            var notes = document.getElementById ("notes"+cislo);
            var notes_all = document.getElementById ("notes_all"+cislo);
            var obr = document.getElementById ("info"+cislo);
            notes.value = newFore;
            notes_all.value = newSur;
            obr.src="/img/info"+info+".png";

            formSubmit(cislo);
        }
// z edit do notes
        function ShowModal (cislo) {
            var notes = document.getElementById ("notes"+cislo);
            var notes_all = document.getElementById ("notes_all"+cislo);

            var sharedObject = {};
            sharedObject.notes = notes.value;
            sharedObject.notes_all = notes_all.value;
            
            if (window.showModalDialog) {
                var retValue = showModalDialog ("/notes.html?id="+cislo, sharedObject, "dialogWidth:200px; dialogHeight:250px; dialogLeft:350px;");
                if (retValue) {
                    UpdateFields (retValue.notes, retValue.notes_all, retValue.cislo, retValue.info);
                }
            }
            else {
                    // we want similar functionality in Opera, but it's not modal!
                var modal = window.open ("{/literal}{$E_CHANNEL_URL}{literal}/notes.html", null, "width=200,height=200,left=300,modal=yes,alwaysRaised=yes", null);
                modal.dialogArguments = sharedObject;
            }
        }

    function checkHandOverForm(id) {
        // kontrola jestli jsou v ostatních polích čísla
    }

    </script>
{/literal}

        <table>   
    {foreach ...}
        <tr>   
        <form action="" method="post" onsubmit="return checkHandOverForm({$id});" name="formular{$id}" id="frm{$id}">
          <td align="right">
              <td bgcolor="#ffccff" title="{$notes_all}">
                  {if $general_notes neq ''}
                      {if $notes neq ''}
                        {assign var="info" value="4"}
                      {else}  
                        {assign var="info" value="1"}
                      {/if}
                      {else}  
                      {if $notes neq ''}
                        {assign var="info" value="5"}
                      {else}  
                        {assign var="info" value="2"}
                      {/if}
                  {/if}
                    <img src="/img/info{$info}.png" id="info{$id}" style="cursor: pointer;" onClick="ShowModal({$id});">

                    <input type="text" name="notes_ind_1" id="notes{$id}" value="{$notes}">
                    <input type="text" name="notes_ind_2" value="{$notes}">
                    <input type="text" name="notes_all_1" id="notes_all{$id}" value="{$general_notes}">
                    <input type="text" name="notes_all_2" value="{$general_notes}">
              </td>                                                                                                                                                                                                      
          <td>
            <input type="hidden" name="id" value="{$id}">
          </td>
          <td align="right">{$zaznam}</td>
        </form>
        </tr>
    {/foreach}
        </table>   
_es
Profil
look23:
A kde je definovaná tá neznáma, mnohokrát použitá, premenná $id?
look23
Profil *
_es:
Všechny proměnný se tahají přes foreach z objektu a databáze. Správně by tam mělo být {$objekt->id}
_es
Profil
look23:
Ťažko nad tým špekulovať, keď nevieme, čo všetko server z nejakých objektov a databázy odošle prehliadaču. Keby si ten problém zredukoval len na HTML, možno by ti mohlo poradiť viac ľudí. Alebo by sa hodila aj „živá“ ukážka.
look23
Profil *
Jeden řádek tabulky
<tr class="kniha_col_1">   
        <form action="" method="post"  id="frm73856">
    <td >

                   <img src="/img/info1.png" id="info73856" style="cursor: pointer;" onClick="ShowModal(73856);">

                    <input type="text" name="notes_ind_1" id="notes73856" value="">
                    <input type="text" name="notes_ind_2" value="">
                    <input type="text" name="notes_all_1" id="notes_all73856" value="pokus">
                    <input type="text" name="notes_all_2" value="pokus">

              </td>                                                                                                                                                                                                      
          <td>
            <input type="submit" onsubmit="return checkHandOverForm(73856);" name="akce" id="trans_send73856" value="Uložit" class="button_dark">
          </td>
                  </form>
        </tr>
_es
Profil
look23:
Ale ten „jeden riadok“ nejako nesedí s [#1]. Udalosť onsubmit má formulár, nie odosielacie tlačítko.
polonium
Profil
A bavíme se o tom, že když odesíláš ajaxový požadavek tak ty data nemáš nebo že na straně serveru nedostaneš žádná data.
look23
Profil *
polonium:
Nedostávám žádná data, na první pohled se to chová jakoby k odeslání formuláře došlo, ale ve skutečnosti se jen reloadne stránka a nic se neprovede.
martin1312
Profil
look23:
_es ti už napísal, kde je chyba [#8]
look23
Profil *
martin1312:
Ale i tak to nepomůže. Pokud to udělám takto.
<form action="" method="post" onsubmit="return checkHandOverForm(73883);"  id="frm73883">
<input type="submit" name="akce" id="trans_send73883" value="Uložit" class="button_dark">
</form>

Tak je to pořád stejné jako [#10], dokonce jsem okomentoval ostatní formuláře, aby se to netlouklo a nic.
peta
Profil
onsubmit="return checkHandOverForm(73883);"
radek 40, druhy kod
    function checkHandOverForm(id) {
        // kontrola jestli jsou v ostatních polích čísla
    }
Prazdna funkce vraci vzdy true, true znamena odeslat formular. Formular je odesilany metodou post, odesila se to bud na tu samou stranku (nebo mozna index.php/htm, ted si nejsem jist, co znamena prazdne action)
<form action="" method="post" onsubmit="return checkHandOverForm(73883);"  id="frm73883">
php na print_r($_POST) vrati co?
echo '<hr><pre>';
print_r($_POST);
echo '</pre><hr>';
"Nedostávám žádná data" je nekonkretni tvrzeni, ktere nic nerika o tom, co je v post.
look23
Profil *
peta:
Pro print_r($_POST); při tom odesílání je $_POST prázdné.

Při je problém stejný jako u toho odesílání scriptem.
<input type="button" onClick="formSubmit(73883)" id="trans_send73883" value="Uložit" class="button_dark">
Pro to ukládání a posílání téhož formuláře funguje.
<input type="submit" id="trans_send73883" value="Uložit" class="button_dark">
polonium
Profil
A koukal jsi ve firebugu ze ty data skutecne neposilas? Pouzivas nejaky framework?
_es
Profil
look23:
Vyrob „živú“ ukážku, nikomu sa nechce z teba „dolovať“ dostatok informácií na vyriešenie tvojho problému.
look23
Profil *
Všem:
Děkuji za spolupráci - nakonec jsem to obešel, věci se ukládají v tom malém okně a do velkého jen javascriptem pošlu návratovou ohdnotu na aktualizaci různých prvků formuláře. Po refresh stránky se ty údaje zaktualizují ze zdroje.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0