Я знаю, что обычный JS способ принятия действия, только если окно подтверждения должен иметь подтверждение внутри функции, как в этом примере JQuery:Может ли javascript прослушать результат подтверждения диалога по отдельному методу?
<script type="text/javascript">
$(function() {
$("#dropdown").change(function() {
var success = confirm('Are you sure want to change the Dropdown ????');
if (success == true) {
// do something
}
else {
// Cancel the change event and keep the selected element
}
});
});
</script>
Этот не работает в моем случае, т.к. подтверждение является частью помощника рельсы:
<%= link_to "Delete", {:controller => 'foo', :action => 'delete', :id => @item.id},
{:method => :post, :confirm => "Are you sure?", :class => "start_spinner"} %>
Я хочу, чтобы запустить некоторые JavaScript на клик (скрыть ссылку для предотвращения двойного щелчка), но только если подтверждение верно. К сожалению, по крайней мере, в Rails 2.3.x невозможно использовать :onclick
, если имеются опции :method
или :confirm
. (Такое поведение отмечено on ApiDock for the link_to helper и то же самое в моем приложении.)
EDIT: Я думаю, что я создал некоторую путаницу, включая пример из ApiDock вместо моего точного кода. Извини за это. Я изменил код ниже, чтобы отразить поведение, которое Rails имеет, когда включен параметр :method => :post
, как это должно быть в моем коде. Разница между двумя выходами по-прежнему просто понижает метод destroyJsFunction
, но есть целая куча других вещей, которые происходят в onclick
, что, кажется, мешает реализации решений, предложенных Сукимой и агностером.
<%= link_to "Delete", {:controller => 'foo', :action => 'delete', :id => @item.id}, :method => :post, :confirm=>"Are you sure?", :onclick=>"destroyJsFunction()", :class => "start_spinner" %>
# expected output
# => <a href="/foo/delete/1" class='start_spinner' onclick="if (confirm('Are you sure?')) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'CSRF_TOKEN'); f.appendChild(s);f.submit(); }; {destroyJsFunction()}; return false;">Delete</a>
# actual output
# => <a href="/foo/delete/1" class='start_spinner' onclick="if (confirm('Are you sure?')) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'CSRF_TOKEN'); f.appendChild(s);f.submit(); }; return false;">Delete</a>
END EDIT
Так как я использую Rails для отправки POST
запроса, я не могу просто переписать ссылку на простом HTML.
Хотелось бы запустить javascript при щелчке ссылки с классом start_spinner
, но я не могу найти способ повторно отобразить ссылку, если подтверждение ложно. Есть ли способ, чтобы отдельный javascript прослушал результаты диалога подтверждения?
Ах, эта редакция работает для меня! Спасибо! Мне просто пришлось немного изменить параметры ajax; вы написали 'method', где вы имели в виду' type'. Благодаря! – joanwolk
Исправлено. Также добавлен параметр '_method', поскольку некоторые браузеры не обрабатывают тип DELETE правильно. – Sukima