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をオーバーライドできます(拡張してエイリアスを作成します)。しかし、私はここでより侵襲性の低い解決策を望んでいました。