有没有人找到用 Jquery 拦截默认 Form::postLink() 表单的方法?我希望表单在没有 JS 的情况下工作(因此 postLink)。但是启用 JS 后,我想拦截帖子并通过 AJAX 调用它。
<?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'])); ?>
生成:
<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>
主要问题是这里的js是内联的。因此,即使我尝试拦截点击事件(或发布事件 - 也尝试过),也总是会触发:
<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>
所以最终表单总是正常提交并重定向 - 要么忽略任何 ajax 调用(捕获表单提交),要么发布/重定向,而不管刚刚进行的 ajax 调用(捕获点击事件)。
我想通过 AJAX 删除这条记录,如果成功的话,只需从 DOM 中删除该表行。不过,如果不必为此修改应用程序中的所有 300 多个“删除按钮”,那就太好了。
如果一切都失败了,我可能仍然可以覆盖 FormHelper(扩展它并为其命名)。但我希望这里有一个侵入性较小的解决方案。