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, которая скрывается, если они нажимают кнопку accept и ничего не делают, если они нажимают на отмену.

EDIT: ответ на вопрос ниже. Это не сработало. Я попытался изменить свою ссылку на:

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

});

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

Ответ 1

remove: confirm = > 'Вы уверены?'

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

    });

Ответ 2

Спасибо, ребята, я использовал следующий учебник для настройки 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

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

: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.
  }
}

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

Ответ 4

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