¿Alguien ha encontrado una forma de interceptar los formularios predeterminados Form :: postLink() con Jquery? Me gustaría que el formulario funcione sin JS (por lo tanto, el postLink). Pero con JS habilitado, quiero interceptar la publicación y llamarla a través de AJAX.Interceptar cake2 postLink() mensajes 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>
El problema principal es que el js se coloca en línea aquí. Por lo tanto, siempre se activa el incluso si intento para interceptar el evento click (o el post evento - intentó que también):
<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>
Así que al final la forma siempre se somete normalmente y redirige - ya sea haciendo caso omiso de cualquier llamada AJAX (para controlar el envío de formulario) o publicación/redirección independientemente de una llamada ajax recién realizada (capturando el evento click).
Me gustaría eliminar este registro a través de AJAX y, si tiene éxito, simplemente elimine esa fila de la tabla de DOM. Sin embargo, sería genial si uno no tiene que modificar los más de 300 "botones de eliminación" en la aplicación.
Si todo falla, es probable que aún pueda anular el FormHelper (extenderlo y alias). Pero esperaba una solución menos invasiva aquí.
Quitar el atributo 'onclick' era lo que me faltaba. Bueno, gracias! – nIcO