2011-02-04 2 views
11

У меня есть форма, которая по большей части просто представляет собой обычную форму, поэтому я не хочу устанавливать в form_tag параметр: remote => true.Rails 3: Как вызвать отправку формы через javascript?

Однако при определенных обстоятельствах я хотел бы иметь функцию javascript, чтобы отправить форму, как если бы она была отправлена: remote => true. Что мне нужно сделать в javascript для этого?

ответ

5

Я просто попытался это, который, безусловно, работает, если форма имеет дистанционное => верно, просто удалите атрибут данных, удаленный представить обычно ж/JavaScript т.е.

$('input').click(function(){ $('#form').removeAttr('data-remote') }); 

Я предполагаю, наоборот, вероятно, будет работать, т.е. если форма не имеет удаленного => правда вобще

$('input').click(function(){ $('#form').attr('data-remote',true)}); 
2

Если вы используете 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; 
    }); 
}); 
3

может быть, у можете попробовать это:

$('#form').submit(); 
+0

Это будет представлять форму нормально, не вызывая format.js. –

33

Я Сорта новичок в этом, но здесь идет ...

rails.js (JQuery один, по крайней мере) определяет следующую функцию, чтобы поймать и представить формы:

$('form').live('submit.rails', function(e) { ... }); 

Если вы используете следующий он должен вызвать ту же самую функцию (и если: удалённое => верно, то это обыкновение вызывать перезагрузки страницы):

$("#<yourformid>").trigger("submit.rails"); 

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

+0

Обновление: проверено и работает. – Karl

+4

Это должен быть правильный ответ. –

+0

Это ответ, на который я смотрел «Как запустить рельсы удаленной формы с помощью javascript» – stream7

1

в Rails 5 (который заменяет Jquery-UJS с рельсами-UJS), это то, как вы вызываете рельсы обработчик придает форму-х submit событие:

var elem = document.getElementById('myform') // or $('#myform')[0] with jQuery 
Rails.fire(elem, 'submit'); 

(Святая корова это брало меня навсегда, чтобы понять это!)

Смежные вопросы