Уничтожение рельсов подтверждают с помощью Jquery AJAX - PullRequest
10 голосов
/ 05 августа 2009

У меня это работает по большей части. Моя рельсовая ссылка:

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

:class => "delete" вызывает функцию ajax, чтобы она удалялась и страница не обновлялась, что прекрасно работает. Но поскольку страница не обновляется, она все еще там. Так что мой идентификатор мусора вызывает эту функцию jquery:

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

Который скрывает строку с любым значком корзины, на который я нажал. Это также прекрасно работает. Я думал, что у меня все получилось, а потом столкнулся с этой проблемой. Когда вы нажимаете на мою корзину, у меня появляется всплывающее окно подтверждения, чтобы спросить вас, уверены ли вы. Независимо от того, выберете ли вы «Отменить» или «Принять», JQuery запускается и скрывает строку. Он не удаляется, только скрывается, пока вы не обновите страницу. Я попытался изменить его так, чтобы приглашение выполнялось через jquery, но затем rails удалял строку независимо от того, что я выбрал в своем приглашении, потому что функция .destroy вызывалась при вызове приглашения.

Мой вопрос на самом деле состоит в том, как мне получить всплывающее окно подтверждения отмены или подтверждения, чтобы в моем jquery я мог получить утверждение if, которое скрывает, если они нажимают кнопку accept, и ничего не делает, если они нажимают кнопку отмены. *

РЕДАКТИРОВАТЬ: Ответ на вопрос ниже. Это не сработало. Я попытался изменить свою ссылку на:

<%= 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.
}
}

Но эта функция никогда не вызывалась. Он просто удаляет его без запроса и не скрывает его. Но это дало мне идею.

Я взял функцию удаления, которую вызывал ajax

     $('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;
        }

});

Что делает трюк.

Ответы [ 4 ]

13 голосов
/ 05 августа 2009

удалить: подтвердить => 'Вы уверены?'

$('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 голосов
/ 29 апреля 2010

Спасибо, ребята, я использовал следующий урок для настройки jquery с rails:

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 голосов
/ 09 апреля 2013

У меня была похожая проблема, но после прочтения этой темы я удалил подтверждение с моей кнопки и сделал следующее в 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 для link_to

3 голосов
/ 05 августа 2009

Вы можете удалить:

:confirm => 'Are you sure?'

и замените его пользовательским событием onclick, например так:

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

Затем в вашем application.js (или любом другом файле JS) выполните:

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

Извините, у меня нет времени, чтобы проверить это прямо сейчас, но должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...