2009-08-05 4 views
10

私はこれをほとんどの部分で使用しています。マイレールリンクがある:それは削除され、ページが素晴らしい作品その更新されないようにRailsはJquery AJAXで確認を破棄します

<%= link_to(image_tag('/images/bin.png', :alt => 'Remove'), @business, :class => 'delete', :confirm => 'Are you sure?', :id => 'trash') %> 

:class => "delete"は、Ajax機能を呼び出しています。しかし、ページがリフレッシュされないので、それはまだそこにあります。だから私のidゴミ箱はこのjquery関数を呼び出しています:

$('[id^=trash]').click(function(){ 
      var row = $(this).closest("tr").get(0); 
      $(row).hide(); 
      return false; 
}); 

クリックしたゴミ箱のアイコンの行が隠れています。これも素晴らしいです。私はそれがすべてうまくいったと思って、私はこの問題にぶつかりました。私のゴミ箱をクリックすると、この確認ボックスのポップアップが表示され、あなたが確認できたら尋ねられます。キャンセルを選択するか受け入れるかにかかわらず、jqueryが起動し、行が非表示になります。削除されず、ページを更新するまで隠されています。私はプロンプトがjqueryによって行われるように変更しようとしましたが、プロンプトが呼び出されたときに.destroy関数が呼び出されていたので、私のプロンプトで何を選択しても、レールは行を削除していました。

私の質問は本当にどのようにキャンセルするか、レールから受け入れることができますので、私のjqueryで私はifステートメントを受け入れる場合は、クリックしてキャンセルし、何もしないことができます。

編集:以下の回答質問。 それは動作しませんでした。私はに私のリンクを変更してみました:

<%= link_to(image_tag('/images/bin.png', :alt => 'Remove'), @business, :class => "delete", :onclick => "trash") %> 

と私のjqueryの

function trash(){ 
if(confirm("Are you sure?")){ 
    var row = $(this).closest("tr").get(0); 
    $(row).hide(); 
    return false; 
} else { 
//they clicked no. 
} 
} 

でこれを置くしかし、関数が呼び出されることはなかったです。プロンプトを表示せずに削除するだけで、隠すことはありません。 しかし、それは私にアイデアを与えました。

私はアヤックスが

 $('a.delete').click (function(){ 
      $.post(this.href, {_method:'delete'}, null, "script"); 
      $(row).hide(); 
}); 

を呼んでいたことを削除機能を取り、あなたのコードを実装し、それを修正:

トリックを行います:confirm => 'Are you sure?'

$('a.delete').click (function(){ 
     if(confirm("Are you sure?")){ 
      var row = $(this).closest("tr").get(0); 
      $.post(this.href, {_method:'delete'}, null, "script"); 
      $(row).hide(); 
      return false; 
     } else { 
      //they clicked no. 
      return false; 
     } 

}); 

を削除します。

答えて

3

あなたは削除することができます。

:confirm => 'Are you sure?' 

などのように、カスタムのonclickイベントに置き換える:あなたのapplication.js(または任意の他のJSファイル)で、次に

<%= link_to(image_tag('/images/bin.png', :alt => 'Remove'), @business, :class => 'delete', :onclick => 'someJSFunction', :id => 'trash') %> 

を、操作を行います。

function someJSFunction(){ 
    if(confirm("Are you sure?"){ 
    //they clicked yes. 
    } else { 
    //they clicked no. 
    } 
} 

私は今それをテストする時間を持っているが、それはありません申し訳ありませんべきの作業。

+0

動作しませんでしたが、答えにつながります。 – Mike

+1

それから私の役に立つためにupvote! ;) –

12

削除:確認=> '本当ですか?「

$('a.delete').click (function(){ 
      if(confirm("Are you sure?")){ 
       var row = $(this).closest("tr").get(0); 
       $.post(this.href, {_method:'delete'}, null, "script"); 
       $(row).hide(); 
       return false; 
      } else { 
       //they clicked no. 
       return false; 
      } 

    }); 
5

はおかげでみんな、私はレールにjqueryのを設定するには、次のチュートリアルを使用:このチュートリアルと併せて使用する場合

http://www.notgeeklycorrect.com/english/2009/05/18/beginners-guide-to-jquery-ruby-on-rails/

、私は次のコードを使用:

 
Query.fn.deleteWithAjax = function() { 
    this.removeAttr('onclick'); 
    this.unbind('click', false); 
    this.click(function() { 
     if(confirm("Are you sure?")){ 
      $.delete_($(this).attr("href"), $(this).serialize(), null, "script"); 
      return false; 
     } else { 
      //they clicked no. 
      return false; 
     } 
    }) 
    return this; 
}; 
3

私も同様の問題がありましたが、このスレッドを読んだあと、私のボタンから確認を取り除き、jqueryで次のことを行いました:

$('.delete_post').on('click', function(){ if(confirm("Are you sure?")){ $(this).closest('tr').delay().fadeOut(); } else{ return false; } });

そして、それは私のためのトリックを行うようです。私はコントローラの破壊アクションにこれを追加しました:

respond_to do |format| 
    format.html { render :nothing => true } 
    format.json { head :no_content } 

P.S.追加することを忘れないでください:remote => true to the link_to

+1

あなたは:remote => true? – Galaxy

+0

ああありがとう – moon4e

関連する問題