Autor Zpráva
David_host
Profil *
Ahoj, prosím moc o pomoc.
V html mám formulář ve kterém se přes post odesílá id řádku tabulky. A řádek s tímto id bude smazán.
Vypadá to takto.
<form method="POST" action="/index.php" >
		<input type="submit"  id="opener" name="delete" value="Smazat" />
		<input type="hidden" name="id" value="<?php echo $id; ?>" />
		<input type="hidden" name="akce" value="smaz" />
</form>

A já bych chtěl aby se při stisku tlačítka Smazat objevilo potvrzovací okno. To se mi podařilo udělat funkční, ale pouze standardní systémové. Chtěl bych ho mít ostylované. V celé aplikaci používám jqery ui.
Proto jsem to zkusil přes jquery. Tu bohužel neumím takže je to docela bastl a nefunguje to jak by mělo :(.
V Jqery mám takovýto kód
				
	var pokracovat = 0;
	$( "#dialog-confirm" ).dialog({
			resizable: false,
			height:140,
			modal: true,
			autoOpen: false,
			buttons: {
				"Smazat": function() {
					$( this ).dialog( "close" );
					pokracovat = 1;
				},
				"Zrušit": function() {
					$( this ).dialog( "close" );
				    pokracovat = 0;

				}
			}
		});

		$( "#opener" ).click(function() {
			$( "#dialog-confirm" ).dialog( "open" );
                if (pokracovat==0) return false;
                if (pokracovat==1) return  true;
		});
 

Funguje to jen na první řádek tabulky. Na další ne - netuším proč.
A pokud kliknu ve vyskočeném okně na smazat tak se mi to nesmaže a musím tlačítko stisknout ještě jednou. Pak už se řádek smaže.

Moc si s tím nedokážu poradit a při tom je to možná prkotina. Nebo jsem to celé uchopil špatně což bohužel nedokážu posoudit.

Děkuji za každou pomoc.
Chamurappi
Profil
Reaguji na Davida_hosta:
Chtěl bych ho mít ostylované.
Proč? Uživatel by standardní dialogové okno nepochopil?

Funguje to jen na první řádek tabulky. Na další ne - netuším proč.
Nemělo by to fungovat správně na žádný.

Okno nasimulované JavaScriptem nemůže být skutečně modální (jako je systémový confirm). Jakmile zavoláš .dialog("open"), otevře se sice dialogové okno, ale skript pojede hned dál — tedy podle proměnné pokracovat ihned rozhodneš, zda vrátíš true/false, přestože dialogové okno zůstává pořád otevřené a čeká na akci uživatele. Teprve když uživatel klikne na jedno z tlačítek, zavolá se příslušná funkce (v uvedeném kódu řádek 9 nebo 13) a nastaví se pokracovat.
Aby to fungovalo tak, jak bys chtěl, musíš pomocí return false odeslání stornovat vždy a až při kliknutí na čudlík "Smazat" vyvolat znovuodeslání.

$( "#opener" )
Zde bude problém i v tom, že jQuery neumí na rozdíl od CSS v některých případech (nebo v některých prohlížečích) dohledat více různých elementů se stejným ID. Tím lze vysvětlit, proč ti nějak funguje jen první tlačítko.
David_host
Profil *
Je to v mé aplikaci a dělám to hlavně proto abych to aspoň trochu pochopil.

Děkuji ti!
id jsem nahradil class, který by měla jquery najít všechny. Funguje mi to, je to aspoň trochu správné řešení?

Děkuji za vysvětlení, teď je mi to jasné. Můžu prosím nějak říct, že ten příkaz má pokračovat, jakoby ani žádné okno nevyběhlo? Nebo musím nějak načíst údaje z formuláře do javascriptu a pak je poslat na stránku přes něj?
Chamurappi
Profil
Reaguji na Davida_hosta:
V obsluze události click na odesílacím tlačítku si můžeš uložit this.form (což je reference na objekt formuláře) do nějaké proměnné a pak z funkce volané při potvrzení zavolat taTváProměnná.submit().
David_host
Profil *
Děkuji moc za nakopnutí :). Jdu nad tím bádat.
David_host
Profil *
Tak jsem to udělal takto, je to prosím aspoň trochu v pořádku nebo je to hodně zbastlený a můžu čekat nějaké chyby, které teď nevidím? Děkuji. Funguje mi to.
 <script type="text/javascript" charset="utf-8">
	
	$(function() {
		oTable = $('#example').dataTable({
			"bJQueryUI": true,
			"sPaginationType": "full_numbers"
		});
				
	$( "#dialog-confirm" ).dialog({
			resizable: false,
			height:140,
			modal: true,
			autoOpen: false,
			buttons: {
				"Smazat": function() {
                                  $('#smazat').submit();
				},
				"Zrušit": function() {
					$( this ).dialog( "close" );

				}
			}
		});

		$( ".opener" ).click(function() {
			$( "#dialog-confirm" ).dialog( "open" );
			     return false;
			                  
		});
 
 }); /* function */

<form method="POST" id="smazat" name="smazat"  action="/index.php" >
		<input type="submit"  class="opener" name="delete" value="Smazat" />
		<input type="hidden" name="id" value="<?php echo $id; ?>" />
		<input type="hidden" name="akce" value="smaz" />
		</form>
</script>

David_host
Profil *
Tak jsem to udělal takto, je to prosím aspoň trochu v pořádku nebo je to hodně zbastlený a můžu čekat nějaké chyby, které teď nevidím? Děkuji. Funguje mi to. Předchozí příspěvek jsem popletl, prosím o smazání. Děkuji

     
                     
    $( "#dialog-confirm" ).dialog({
            resizable: false,
            height:140,
            modal: true,
            autoOpen: false,
            buttons: {
                "Smazat": function() {
                                  $('#smazat').submit();
                },
                "Zrušit": function() {
                    $( this ).dialog( "close" );

                }
            }
        });

        $( ".opener" ).click(function() {
            $( "#dialog-confirm" ).dialog( "open" );
                 return false;
                              
        });
 
 


<form method="POST" id="smazat" name="smazat"  action="/index.php" >
        <input type="submit"  class="opener" name="delete" value="Smazat" />
        <input type="hidden" name="id" value="<?php echo $id; ?>" />
        <input type="hidden" name="akce" value="smaz" />
 </form>

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:

0