Rails + jQuery - Использование jQuery для отправки формы без кнопки «Отправить» - PullRequest
0 голосов
/ 26 октября 2010

Дано:

<%=form_for [:project, @note], :remote => true do |f| %>

Я бы хотел создать привязку jquery, которая будет автоматически сохраняться каждые несколько секунд. Я пока не беспокоюсь по поводу времени, просто как использовать jquery для автоматической отправки формы (т. Е. Не нажатия кнопки «Отправить» пользователем).

Я попробовал это, но это не работает. Предложения?

$('form[data-remote]').live('submit', function (e) {
    alert(1);
    e.preventDefault();
});

Спасибо!

Ответы [ 4 ]

4 голосов
/ 26 октября 2010

То есть вы говорите о чем-то вроде автосохранения, верно?

Может быть, вы хотите указать интервал Javascript для этого. Примером может быть:

var autosave = window.setInterval("autosaveForm()", 1000);

function autosaveForm() {
  $('form[data-remote]').submit();
}

Что это значит - звонить autosaveForm() каждую секунду и отправлять форму. Чтобы остановить автосохранение, вы можете просто использовать clearInterval следующим образом:

window.clearInterval(autosave);

Надеюсь, это поможет.

2 голосов
/ 26 октября 2010

$('form[data-remote]').submit() отправит форму.

0 голосов
/ 26 октября 2010

Какую версию jQuery вы используете? Вы используете IE? Ранние версии live () не работали с IE для отправки форм. (См. http://github.com/rails/jquery-ujs/issues/issue/8)

Я думаю, что в конечном итоге использовал это:

if (jQuery.browser.msie){
    $("form[data-remote]").delegate("input[type='submit'],button[type='submit'],input[name='commit']", 'click', function(e) {
        $(this).parents("form[data-remote]").submit();
        if(e.preventDefault) e.preventDefault();
    });
}

в проекте.

0 голосов
/ 26 октября 2010

Начните с setInterval:

  setInterval(transmit, 3000);

, который вызывает эту функцию:

function transmit(){
 // get the form field data
 var params = {
   formField1:$("input#formField1").val(),
   formField2:$("input#formField2").val()
 }

 // make the ajax call
 var url = "/controller/action";
   $.post(url, params,
     function(response, status){
     //display results(response, status);
   });
}
...