Qualcuno ha trovato un modo per intercettare i moduli Form :: postLink() predefiniti con Jquery? Vorrei che il modulo funzionasse senza JS (quindi il postLink). Ma con JS abilitato voglio intercettare il post e chiamarlo tramite AJAX.Intercept cake2 postLink() modulo post con jQuery
<?php echo $this->Form->postLink('Delete', array('action'=>'delete', $prospect['Prospect']['id']), array('class'=>'postLink', 'escape'=>false), __('Sure you want to delete # %s?', $prospect['Prospect']['id'])); ?>
genera:
<form action="/admin/prospects/delete/4f61ce95-2b6c-4009-9b89-07e852b0caef" name="post_4f648f773923b" id="post_4f648f773923b" style="display:none;" method="post">
<input type="hidden" name="_method" value="POST"/>
</form>
<a href="#" class="postLink" onclick="if (confirm('Sure you want to delete # 4f61ce95-2b6c-4009-9b89-07e852b0caef?')) { document.post_4f648f773923b.submit(); } event.returnValue = false; return false;">
Delete
</a>
Il problema principale è che i js è posto in linea qui. Pertanto attiva sempre, anche se cerco di intercettare l'evento click (o l'evento post - provato anche questo):
<script>
$(document).ready(function() {
$('table.list a.postLink').click(function(e) {
e.preventDefault();
alert('Handler for .submit() called.');
// TODO: do ajax request here and return false
return false;
});
});
</script>
Così, alla fine del modulo invia sempre normalmente e reindirizza - o ignorando qualsiasi chiamata AJAX (cattura la modulo di invio) o pubblicazione/reindirizzamento indipendentemente da una chiamata Ajax appena effettuata (cattura l'evento click).
Vorrei eliminare questo record tramite AJAX e, in caso di successo, rimuovere la riga della tabella dal DOM. Sarebbe bello se non fosse necessario modificare tutti i 300 + "pulsanti di cancellazione" nell'applicazione per questo, però.
Se tutto fallisce, probabilmente potrei comunque sovrascrivere FormHelper (estenderlo e renderlo alias). Ma speravo in una soluzione meno invasiva qui.
Rimuovere l'attributo 'onclick' era ciò che mi mancava. Bene, grazie! – nIcO