Nette.ajax a confirm dialog u odkazu

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

Ahoj,
řeším celkem triviální problém, přes který se nemůžu dostat. Používám v aplikaci nette.ajax.js. Mám odkaz, který má třídu ajax a makrem confirm mu přidávám potvrzovací dialog. Když kliknu v dialogu na Cancel, navázaná funkce confirmSafe správně vrací false a volá event.preventDefault(). Ajaxový požadavek se ale přesto následně zavolá. Co dělám špatně a jak to udělat líp?

Javascripty mám nalinkované v tomto pořadí:

first.js

<script>
$(function(){
    window.confirmSafe = function(el, event){
        var confirmText = el.data('confirm');
        var confirmed = confirm(confirmText);

        if(confirmed){
            return true;
        }

        // tohle při kliknutí na Cancel proběhne v pořádku
        event.preventDefault();
        return false;
    };

    window.getElementsByData = function(attributeName)
    {
        var matchingElements = [];
        var allElements = document.getElementsByTagName('*');

        for (var i = 0, n = allElements.length; i < n; i++){
            if (allElements[i].getAttribute('data-' + attributeName) !== null){
                // Element exists with attribute. Add to array.
                matchingElements.push(allElements[i]);
            }
        }
        return matchingElements;
    };

    window.bindConfirm = function(){
        console.info('safe confirm bound');
        var elements = window.getElementsByData('confirm');

        $.each(elements, function(){
            $(this).click(function(event){
                return window.confirmSafe($(this), event);
            });
        });
    };

    window.bindConfirm(); // dělá úplně to samé, jako když navážu potvrzení až v load
});
</script>

nette.ajax.js
(beze změn)

second.js

<script>
$(function(){
	$.nette.ext({
        load: function(){
            window.bindConfirm(); // protože odkazy s potvrzením se nachází uvnitř snippetu
        }
    });
});
</script>
F.Vesely
Člen | 369
+
+2
-

Pouzivam toto:

<script>
$.nette.ext({
	before: function (xhr, settings) {
		if (!settings.nette) {
			return;
		}

		var question = settings.nette.el.data('confirm');
		if (question) {
			return confirm(question);
   		}
 	}
});
</script>

a u odkazu

<a class="ajax" data-confirm="Opravdu?">...</a>
Oli
Člen | 1215
+
+2
-

Jo, tohle mě taky nachytalo. Uplně jsem tvůj kod nestudoval, ale pokud tam nemáš něco speciálního, tak můžeš rovnou použít confirm.ajax.js.

chikeet
Člen | 160
+
0
-

Aaha, tak tohle je ten chybějící dílek skládačky :-) Věděla jsem, že existuje něco, co pracuje s data-confirm, jen jsem netušila, co to je a že je to až takhle pěkně udělané. Díky!