0

実行のために呼び出されているにもかかわらず、この jQuery JS が ajax 呼び出しを行っていない理由を調べようとしています。

このボタンを使用して、コントローラーのメソッドに ajax GET リクエストを送信すると、メソッドは部分的にレンダリングされます。ボタンをクリックすると、コンソールにリクエストが表示されませんが、ブラウザに「テスト」というアラートが表示されます。
私はまったく同じ JS を持っており、他のパラメーターが他の ajax 呼び出しの tupes で機能しているので、そのうちの 1 つをコピーして必要なすべてのパラメーターを変更しただけで、すぐに機能するはずです。コンソールにエラーも表示されません。私のルートとID名は良好で検証済みです。ここで私が見逃しているのは何ですか?

ビュー - 注: このボタンは別の ajax を介してレンダリングされ、その部分が機能します。

<%= button_tag "Add / Remove", :id => "add_remove_button", :onclick => "javascript:add_remove();" %> #note: this is buried under div tags in a html table

JS-

 function add_remove(){
$('#add_remove_button').click(function() {
      $.ajax({
        type: 'GET',
        url: "/item/add_remove", 
        success:$('#view_item').html(data)

        /*function(){  },
        data:$('#test').serialize(),
        error: function(){  },
        success: function(data){   },
        complete: function (){   }*/
        }); #No ajax call made
/*return false;*/
});
alert('test'); #I get this alert
}
4

2 に答える 2

1

は非同期であるalert()ため、常に表示されます。渡されたクリック内のコードは、クリックするまで実行されませんが、残りのコードは呼び出されます。click()function()add_remove()

コードで実際に何が起こっているかを次に示します。これは、AJAX 呼び出しが行われない理由を説明しています。

  1. を使用すると、ボタンに:onclick => ...アタッチされます。add_remove()
  2. ボタンをクリックすると、add_remove()呼び出され、別のクリック コールバックがボタンにアタッチされます。次に、add_remove()を呼び出しますalert()。ここでは AJAX 呼び出しは行われず、新しいクリック ハンドラーを追加してアラートを送信するだけです。
  3. ボタンを 2 回クリックすると、3 回目のクリック コールバックがボタンにアタッチされます。ただし、ボタンを初めてクリックしたときにクリック ハンドラーもアタッチしたため、ここに AJAX 要求が表示されます。
  4. 3 回目にクリックすると、今回は 2 つの AJAX リクエストが表示され、合計 3 つの AJAX リクエストが表示されます。

これが実際にやりたいことです。ボタンから :onclick => ... を削除します。

<%= button_tag "Add / Remove", :id => "add_remove_button" %>

ページが最初にロードされたときにクリック イベントをボタンにアタッチします。

$(function(){
  $('#add_remove_button').click(function() {
    $.ajax({
      type: 'GET',
      url: "/item/add_remove", 
      success: function(data) { $('#view_item').html(data); },
      data: $('#test').serialize(),
      error: function(){  },
      success: function(data){   },
      complete: function (){   }
    });
    return false;
  });
});
于 2012-04-21T15:30:03.223 に答える
0

jquery-registering-callbacks スタイルと古いイベント ハンドラ属性を混同しています。したがって、add_remove 関数を呼び出したときに登録がトリガーされました。

:onclick のものを削除するだけで、function add_remove(){ ... }

于 2012-04-21T15:31:30.353 に答える