2012-11-01 7 views
6

Modifica - chiaramente nessuno ha idea di cosa mi tormenta. Penso che sia solo questione di essere qualcosa che ho fatto altrove nella pagina che sta bloccando l'attributo di stato inviato. Il problema è che non riesco a vedere nulla. Spero che qualcuno abbia visto qualcosa di simile e possa suggerire dove devo guardare.Perché non posso inviare un campo modulo con 'stato' nel nome?


Ho un modulo fittizio sulla mia pagina per inviare dati alla mia web-app. È creato in Rails (usando HAML) in questo modo;

=form_tag bulk_invoice_path(''), method: 'put', class: 'mark-sent-form' do 
    =hidden_field_tag 'invoice[status]', 'Sent' 

Questo genera il seguente html;

<form accept-charset="UTF-8" action="/bulk_invoices/" class="mark-sent-form" method="post"> 
    <div style="margin:0;padding:0;display:inline"> 
    <input name="utf8" type="hidden" value="&#x2713;" /> 
    <input name="_method" type="hidden" value="put" /> 
    <input name="authenticity_token" type="hidden" value="OU8GtbHycR/EJ+H3GG9MN59xI59v47LSaFc2wYZloAs=" /> 
    </div> 
    <input id="invoice_status" name="invoice[status]" type="hidden" value="Sent" /> 
</form> 

Nel DOM, questo appare come segue

<form accept-charset="UTF-8" action="/bulk_invoices/" class="mark-sent-form" method="post"> 
    <div style="margin:0;padding:0;display:inline"> 
    <input name="utf8" type="hidden" value="✓"> 
    <input name="_method" type="hidden" value="put"> 
    <input name="authenticity_token" type="hidden" value="OU8GtbHycR/EJ+H3GG9MN59xI59v47LSaFc2wYZloAs="> 
    </div> 
    <input id="invoice_status" name="invoice[status]" type="hidden" value="Sent"> 
</form> 

Questo modulo è inviato con jquery (usando CoffeeScript) in questo modo;

jQuery -> 
    $('a.mark-sent').click -> updateBulkInvoices('.mark-sent-form') 

updateBulkInvoices = (form) -> 
    $(form).attr('action', "/bulk_invoices/#{checkedInvoices().get().join()}").submit() 

Questo modello mi ha servito bene con altre azioni, ma la 'fattura [stato]' sembra essere la causa dei problemi. Quando il modulo viene inviato con jQuery, il campo nascosto non viene passato. Vedo quanto segue nella mia console Rails;

Parameters: {"utf8"=>"✓", "authenticity_token"=>"+qW9kIih5l2j69w1LK2YfQ9mYQ7nKPDm5XgLZuKB4ic=", "id"=>"16"} 

cioè la fattura campo [stato] non viene passato con i parametri di modulo. Se cambio il nome di questo campo in qualsiasi altra cosa, funziona bene, ad es.

=form_tag bulk_invoice_path(''), method: 'put', class: 'mark-sent-form' do 
    =hidden_field_tag 'invoice[flatus]', 'sent' 

mi dà i seguenti parametri nella mia console;

Parameters: {"utf8"=>"✓", "authenticity_token"=>"+qW9kIih5l2j69w1LK2YfQ9mYQ7nKPDm5XgLZuKB4ic=", "invoice"=>{"flatus"=>"sent"}, "id"=>"16"} 

vedo la stessa cosa accade se a monitorare la scheda 'rete' a strumenti per gli sviluppatori di Chrome in modo da non penso che sia una cosa Rails, sembra essere un problema di browser. Provo la stessa cosa anche con Safari e Firefox.

Lo stato è una sorta di parola magica riservata nei moduli del browser? Cosa sta succedendo qui?

+0

No, non ci sono parole riservate. L'ho provato e funziona correttamente. –

+0

OK, non funziona comunque per me. – brad

+0

Puoi pubblicare il modulo HTML generato? –

risposta

3

Non sono stato in grado di riprodurre il problema, ma sospetto che sia stato causato da Javascript durante l'invio del modulo. Per eseguire il debug questo, è possibile effettuare le seguenti operazioni:

  1. Aprire la pagina in Chrome
  2. Fare clic destro sul pulsante di invio, scegliere 'ispezionare elemento'
  3. selezionare la scheda 'fonti'.
  4. Nella scheda delle fonti, trovare il codice sorgente per il javascript denominato quando si fa clic su Invia. Probabilmente dovrai fare clic sulla freccia destra di teensy nella casella sotto la scheda 'elementi'. Inoltre, se il codice è stato annullato con tutte le interruzioni di riga rimosse, è possibile fare clic sull'icona di parentesi graffe 'pretty print' nella parte inferiore della pagina .
  5. Una volta trovato il metodo, fare clic sul numero di riga accanto ad esso sulla sinistra di . Nel pannello di destra dovresti vederlo visualizzato nella sezione "Breakpoint" .
  6. Ricarica la pagina
  7. Fare clic sul pulsante di invio.

Questo dovrebbe portarti nel debugger Javascript messo in pausa sull'azione di invio e puoi quindi scorrere il codice e vedere esattamente cosa sta facendo.

Spero che questo aiuti!

+0

Fantastico, grazie. Questo mi ha spinto a passare finalmente correttamente il mio codice e ho scoperto una funzione con lo stesso nome di quella che stavo chiamando. L'avevo scritto secoli fa, l'ho sostituito, non cancellato e dimenticato. Ad ogni modo, è stato il colpevole che il mio modulo non sia stato presentato correttamente. Questo progetto ha più Javascript di quanto abbia mai scritto prima e sto iniziando a perdere traccia. Penso di aver bisogno di alcuni suggerimenti per il wrangling Javascript! – brad

Problemi correlati