2010-10-25 26 views
0

Vu:Rails + jQuery - Utilisation de jQuery pour soumettre le formulaire w/o le bouton Soumettre

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

J'aimerais créer une liaison jquery qui enregistre automatiquement toutes les quelques secondes. Je ne suis pas inquiet pour la partie timing, juste comment utiliser jquery pour soumettre le formulaire automatiquement (ie, ne pas soumettre le bouton click par l'utilisateur.)

J'ai essayé, mais ça ne fonctionne pas. Suggestions?

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

Merci!

Répondre

4

Donc, vous parlez de quelque chose comme Autosave, non?

Peut-être que vous souhaitez spécifier un intervalle Javascript à cela. Un exemple pourrait être:

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

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

Ce que cela fait est d'appeler autosaveForm() chaque seconde et soumet le formulaire. Pour arrêter l'enregistrement automatique, vous pouvez simplement utiliser clearInterval comme ceci:

window.clearInterval(autosave); 

J'espère que cela aide.

+0

merci Max. J'ai l'autosave vers le bas, pas de problème là-bas. Je n'ai pas pu ajax soumettre le formulaire, avec une fonction séparée autre que le bouton SUBMIT généré par Rails 3. – TheExit

+1

Oui, car Rails UJS lie les actions directement au formulaire, si vous regardez dans les rails.js fichier de votre application, vous pouvez voir comment cela fonctionne (devrait être la ligne 76). Pour déclencher une sauvegarde, il suffit de faire $ ('form [data-remote]'). Trigger ('submit'); Est-ce que c'est ce que vous cherchez? –

2

$('form[data-remote]').submit() soumettra le formulaire.

+0

Merci, mais cela n'a pas fonctionné. Comment déclencher l'envoi AJAX? – TheExit

+0

Oh, mais vous avez dit que vous n'étiez pas inquiet pour la partie timing. Je pensais que tu savais comment régler les événements d'intervalle. Eh bien, les autres réponses devraient répondre à cela. – shoebox639

0

Commencez par setInterval:

setInterval(transmit, 3000); 

qui appelle cette fonction:

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); 
    }); 
} 
0

Quelle version de jQuery utilisez-vous? Utilisez-vous IE? Les premières versions de live() ne fonctionnaient pas avec IE pour les soumissions de formulaire. (Voir http://github.com/rails/jquery-ujs/issues/issue/8)

Je pense que je fini par utiliser ceci:

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(); 
    }); 
} 

dans un projet.