EasyJsConfirm – jednoduche potvrzovani udalosti

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Felix
Nette Core | 1196
+
0
-

Zdravim,

resil jsem tuhle jak ochranit uzivatele od nechteneho smazani nebo upraveni nece. Stvoril jsem jednoduche potvrzovani.

Zde javascriptove potvrzovani:

// EasyJsConfirm
$('input, a, .easyconfirm').each(function(index, el){
	var obj = $(el).data();
	if(obj.confirm){
		$(el).click(function(){
			if(confirm(obj.confirm)){
				return true;
			}else{
				return false;
			}
		});
	}
});

Vyuziti napriklad v sablone:

<a href="{link delete!,$article->id}" data-confirm="Opravdu smazat tento clanek?">SMAZAT</a>

Nebo ve formulari:

$form->addSubmit('delete','Smazat')->getControlPrototype()->data['confirm'] = "Opravdu chcete smazat tento clanek?";

Jen sem se o to chtel podelit ;-)

Editoval Felix (3. 11. 2011 20:23)

22
Člen | 1478
+
0
-

je to výborný, akorát mám raději, když mi to vypíše i co chci smazat, aby se zaroveň potvrdilo, že předchozí kliknutí v tabulce třeba nebylo někam jinam :-)))

Felix
Nette Core | 1196
+
0
-

22 napsal(a):

je to výborný, akorát mám raději, když mi to vypíše i co chci smazat, aby se zaroveň potvrdilo, že předchozí kliknutí v tabulce třeba nebylo někam jinam :-)))

to uz zalezi co das do toho textu ;-)

22
Člen | 1478
+
0
-

jj, jsem si nevšim data-confirm, pak ok.. .-) Možná jako jQuery plugin teda potom.. :-)

Editoval 22 (3. 11. 2011 19:51)

voda
Člen | 561
+
0
-

Nebylo by lepší dát podmínku na data-confirm atribut rovnou do selektoru?

$('[data-confirm]')...

Pak by ses mohl zbavit volání each.

Felix
Nette Core | 1196
+
0
-

voda napsal(a):

Nebylo by lepší dát podmínku na data-confirm atribut rovnou do selektoru?

$('[data-confirm]')...

Pak by ses mohl zbavit volání each.

myslis

// EasyConfirm
$('[data-confirm]').click(function(){
	if(confirm($(this).data().confirm)){
		return true;
	}else{
		return false;
	}
});

jo to by asi slo :)

Editoval Felix (3. 11. 2011 20:24)

voda
Člen | 561
+
0
-

Ještě ten if tam je asi taky zbytečný.

Felix
Nette Core | 1196
+
0
-

voda napsal(a):

Ještě ten if tam je asi taky zbytečný.

// EasyConfirm
$('[data-confirm]').click(function(){
	return confirm($(this).data().confirm);
});

hh xD docela zjednoduseni .. by se dalo pouzit v netteForms trebas..

Editoval Felix (3. 11. 2011 20:40)

redhead
Člen | 1313
+
0
-

Nic proti, ale tohle bych ani moc jako doplněk nenazýval. Tohle je na pár minut psaní a s Nette to taky nemá nic moc společnýho.

hrach
Člen | 1838
+
0
-

a jeste k tomu tam chybi event.stopPropagation(), pac kdyz na tom bude zaveseny jiny ajax, tak to projde.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Dovolím si jen dodat, že před časem David Grudl doporučoval pro tento účel používat data-nette-confirm, protože podobná funkcionalita by měla být do Nette přímo integrována. Navíc na stránce addonu je odkázané špatné vlákno ve fóru. Hm… taky jsem někde tady na fóru četl nápad vytvořit čistě pro budoucí kompatibilitu makro n:confirm, které by ten datový atribut zapouzdřovalo. Vůbec kolem tohohle nápadu tady padlo tolik vylepšení, že je až s podivem, že nejsou zrovna v tomto addonu implementovány. Aneb dvakrát měř a jednou řež :)

Nicméně když se to vychytá, podle mě je to jako addon (řešící konkr. problém) fajn.

zapp
Člen | 32
+
0
-

Toto nefunguje v případě, že je chci vyvolat data-confirm znovu po invalidaci snippetu. Neukáže se confirm dialog, ale rovnou proběhne ajaxový požadavek. Zkusil jsem to ošetřit kódem viz. níže, ale ten projde i když se nepotvrdí confirm dialog, vlastně to projde ještě před vykreslením dialogu. Někdo nějaký nápad?

$('[data-confirm]').live("click", function(e) {
        return confirm($(this).data().confirm);
});
zapp
Člen | 32
+
0
-

Nakonec pomohlo tohle řešení, které jsem našel, kdyby měl někdo stejný problém.

$('body').delegate('[data-confirm]', 'click', function (e) {
	if (!confirm($(this).attr('data-confirm'))) {
		e.preventDefault();
		e.stopImmediatePropagation();
	        return false;
        }
});
Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Dovolím si spíš odkázat na nette.ajax.js a jeho extenzi confirm.