Rails 3: Как запустить отправку формы через javascript?
У меня есть форма, которая по большей части просто отправляет как нормальную форму, поэтому я не хочу устанавливать в form_tag параметр :remote => true.
однако при определенных обстоятельствах я хотел бы, чтобы функция javascript опубликовала форму, как если бы она была опубликована :remote => true. Что мне нужно сделать в javascript для этого?
5 ответов
Я просто попробовал это, что определенно работает, если форма имеет remote = > true, просто удалите атрибут data-remote, чтобы отправить обычно w / javascript ie
$('input').click(function(){ $('#form').removeAttr('data-remote') });
Я предполагаю, что противоположное, вероятно, будет работать ie, если форма не имеет remote = > true, просто сделайте
$('input').click(function(){ $('#form').attr('data-remote',true)});
Я вроде как новичок в этом, но здесь идет...
рельсы.js (по крайней мере, jquery) определяет следующую функцию для захвата и отправки форм:
$('form').live('submit.rails', function(e) { ... });
Если вы используете следующее, он должен вызвать ту же функцию (и если: remote = > true, то это не вызовет перезагрузку страницы):
$("#<yourformid>").trigger("submit.rails");
Итак, если вы хотите отправить свою форму на изменение выбора, например, вы можете установить вышеуказанный вызов триггера на select's :onchange, я бы предположил.
Если вы используете jQuery, вы можете сделать что-то вроде этого, чтобы иметь форму auto-post на событиях keyup или упростить ее для запуска Вручную:
$(function() {
$("#live_search input").keyup(function() {
q = $('#search_text').val();
$.ajax({
beforeSend : function(request) { request.setRequestHeader("Accept", "text/javascript"); },
// Included so Rails responds via "format.js"
data : 'query=' + q,
success : function(data, textStatus, XMLHttpRequest) {
// alert(textStatus);
$("#live_search #results").html(data);
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
// alert(errorThrown);
$('#annotation_dialog').html(XMLHttpRequest.responseText);
},
type : 'POST',
url : '/search/live'
});
return false;
});
});
в Rails 5 (который заменяет jquery-ujs rails-ujs), вот как вы запускаете обработчик rails, прикрепленный к форме submit
событие:
var elem = document.getElementById('myform') // or $('#myform')[0] with jQuery
Rails.fire(elem, 'submit');
(Святая корова, мне потребовалась вечность, чтобы понять это!)