使用jQuery拦截cake2 postLink()表单帖子

mar*_*ark 5 post cakephp formhelper cakephp-2.1

有没有人找到一种方法来拦截默认的Form :: postLink()表格与Jquery?我希望表单在没有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'])); ?>
Run Code Online (Sandbox Code Playgroud)

产生:

<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>
Run Code Online (Sandbox Code Playgroud)

主要问题是js在这里放置了内联.因此,即使我尝试拦截click事件(或post事件 - 也尝试过),它总是会触发:

<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>
Run Code Online (Sandbox Code Playgroud)

所以最后表单总是正常提交​​并重定向 - 忽略任何ajax调用(捕获表单提交)或发布/重定向,而不管刚刚发出的ajax调用(捕获click事件).

我想通过AJAX删除此记录,如果成功,只需从DOM中删除该表行.如果不必修改应用程序中的所有300多个"删除按钮",那将会很棒.

如果一切都失败了,我可能仍然会覆盖FormHelper(扩展它并将其别名).但我希望这里有一个侵入性较小的解决方案.

小智 8

我知道这是旧的,但对于任何搜索:

  • 您需要先删除添加到删除链接的"onclick"属性.
  • 然后,将.click函数添加到删除链接
  • 你需要url(可以从表单中硬编码或检索,这总是cakephp Form中的prev元素 - > postLink

这是代码:


$(function(){

    $('a:contains("Delete")').removeAttr('onclick');

    $('a:contains("Delete")').click(function(e){
        e.preventDefault();
        var form = $(this).prev();
        url = $(form).attr("action");
        $.post(url);
        return false;
    });

});
Run Code Online (Sandbox Code Playgroud)