2011-02-04 16 views
11

Ho un modulo che per la maggior parte si limita a presentare come un modulo normale, quindi non voglio impostare nel form_tag l'opzione: remote => true.Rails 3: Come attivare l'invio di un modulo tramite javascript?

Tuttavia, in determinate circostanze mi piacerebbe poter avere una funzione JavaScript nel modulo come se fosse stato pubblicato da: remote => true. Cosa avrei bisogno di fare in javascript per realizzare questo?

risposta

5

Ho appena provato questo che funziona sicuramente, se il form ha remota => true, è sufficiente rimuovere l'attributo data-remote a presentare normalmente w/javascript vale a dire

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

sto cercando di indovinare il contrario sarebbe probabilmente lavorare cioè se il modulo non ha a distanza => true solo fare

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

Se stai usando jQuery si potrebbe fare qualcosa di simile per avere la forma di auto-post su eventi KeyUp, o semplificare in modo da attivare manualmente:

$(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

forse u potrebbe provare questo:

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

che presenterà la forma normalmente, senza innescare format.js. Aggiornamento –

33

sono sorta di nuovo da questo, ma qui va ...

rails.js (jQuery almeno uno) definisce la seguente funzione per catturare e inviare moduli:

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

Se si utilizza la seguente dovrebbe far scattare la stessa funzione (e se: a distanza => vero, allora non causerà una pagina di ricarica):

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

Quindi, se si voleva inviare il tuo per esempio, su una modifica selezionata, è possibile impostare la chiamata di attivazione sopra alla selezione: onchange che immagino.

+0

: testato e funziona. – Karl

+4

Questa dovrebbe essere la risposta corretta. –

+0

Questa è la risposta che stavo cercando "Come attivare l'inoltro di moduli remoti di un binario con javascript" – stream7

1

In Rails 5 (che sostituisce jquery-UJS con Rails-UJS), questo è il modo di attivare le rotaie gestore attribuisce ad una forma di submit evento:

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

(Holy cow c'è voluto me per sempre per capirlo!)

Problemi correlati