0

jQuery の .on を Rails の ajax リンクで動作させるのに多くの問題があります。

具体的には、次のリンクがあります。

<div id="item_7_tools" class="item_tools">        
    <a rel="nofollow" id="book_item_7" data-remote="true" data-method="post" class="book_link" href="bookings">Book this item</a>
</div>

HTML 内のテキストの一部をトリミングしましたが、それだけで十分であり、コントローラーの応答が機能します。「このアイテムを予約する」をクリックすると、コントローラーに送られ、コントローラーが魔法をかけて、その div の内容を置き換えるパーシャルを送り返します。

そのため、ロードが機能している間に内容を ajax スピナーに置き換えようとしています。

JavaScriptが機能していることを確認するためだけに、この最初の一連のjQueryコードを試しています。

$('div.item_tools')
    .on('click', 'a', function() {
        console.log("clicky click")
    })
    .on('ajax:beforeSend', "a", function() {
        console.log('the a in div.item_tools is sending its ajax command');
    })
    .on('ajax:complete', "a", function() {
        console.log('ajax request completed');
    })  

aそれについての私の理解では、クラスを持つ要素内にあるリンク ( ) をクリックするitem_toolsと、この関数にバブルアップし、メッセージがコンソールに記録されます。同様に、ajax リクエストをトリガーしたリンクは、同じ処理を取得します... (そして、それを機能させることができると仮定すると、ajax ローダー スピナーの実行に取り掛かります)。

代わりに私が見ている動作は、リンクをクリックしても、コンソールにメッセージが表示されず (Firefox と chrome の両方でこれを試しています)、ajax リンクがオフになり、正しく機能することです。javascriptを完全に無視しています...これは、ajaxリンクをクリックすると、クリックイベントがバブルアップするのをブロックしたためですか? それを行う方法があることは知っていますが、故意にそれを行ったことはないと思います。OOTB rails/ujs がそうしない限り?

だから私の質問:

  1. バインディングが添付されているものを確認する方法はありますか?
  2. 私のjavascriptで何が間違っていますか?

ありがとう!

4

3 に答える 3

-1

私の知る限り、次の 2 つの方法で ajax を実行できます。

  1. 使用することで:remote => true
  2. jQueryの$.ajax(または$.post)を使用して。

番号2で、必ず変更してくださいhref='#'

私の提案は、を削除して:remote => true、手動で jQuery ajax 呼び出しを行うことです。そうすれば、beforeSend、complete などを使用できます。

私がここで軌道から外れている場合は、誰かが私のために物事を明確にするのを手伝ってください。

于 2013-04-17T18:39:54.573 に答える