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
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
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
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.