Rails 3: Как вызвать отправку формы через javascript?
У меня есть форма, которая по большей части просто представляет собой обычную форму, поэтому я не хочу устанавливать в form_tag параметр: remote = > true.
Однако при определенных обстоятельствах я бы хотел, чтобы функция javascript опубликовала форму, как если бы она была отправлена: remote = > true. Что мне нужно сделать в javascript для этого?
Ответы
Ответ 1
Я просто пробовал это, что определенно работает, если форма имеет remote = > true, просто удалите атрибут data-remote для отправки обычно w/javascript, т.е.
$('input').click(function(){ $('#form').removeAttr('data-remote') });
Я предполагаю, что противоположное, вероятно, сработает, т.е. если у формы нет remote = > true, просто сделайте
$('input').click(function(){ $('#form').attr('data-remote',true)});
Ответ 2
Я новичок в этом, но здесь идет...
rails.js(по крайней мере, jquery) определяет следующую функцию для поиска и отправки форм:
$('form').live('submit.rails', function(e) { ... });
Если вы используете следующее, он должен запускать ту же функцию (и если: remote = > true, то это не вызовет перезагрузку страницы):
$("#<yourformid>").trigger("submit.rails");
Итак, если вы хотите, например, отправить свою форму на выбранное изменение, вы можете установить вышеуказанный триггерный вызов на select: onchange, который я мог бы себе представить.
Ответ 3
Возможно, вы могли бы попробовать следующее:
$('#form').submit();
Ответ 4
Если вы используете jQuery, вы можете сделать что-то вроде этого, чтобы иметь автозапуск формы при событиях 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;
});
});
Ответ 5
В Rails 5 (который заменяет jquery-ujs на rails-ujs), это то, как вы запускаете рельсы обработчика, прикрепляясь к форме submit
event:
var elem = document.getElementById('myform') // or $('#myform')[0] with jQuery
Rails.fire(elem, 'submit');
(Святая корова потребовала меня навсегда, чтобы понять это!)