invia disabili campi

So che il comportamento definito per i moduli web è quello di non presentare disabili campi… ma non è questa la definizione che voglio. Voglio usare ajax per inviare il form e voglio che per ottenere tutti i campi, anche se sono disattivate. Non voglio costruire una soluzione dove faccio il campo “guarda disabili”… o hack dove attivare i campi -> post -> disattivare.

è possibile fare ajaxSubmit() o serialize() prendi i disabili, i campi, come si muove attraverso il DOM afferrare e di valori? oppure c’è un altro serializzare plugin là fuori che può fare questo? o qualcuno ha un mod posso fare a uno di questi plugin per farlo funzionare?

o sono condannati a inciderlo?

  • Spiegare la serie di eventi che si desidera che l’utente esperienza, quindi siamo in grado di aiutare a trovare una soluzione. Ci deve essere qualcosa di più per la storia, l’altro saggio non c’è alcun motivo per utilizzare una casella di selezione se è solo andare a essere disattivato.
  • Ecco un motivo per cui abbiamo voluto questa funzionalità (in un progetto diverso estranei all’OP). Abbiamo un AJAXed sito web che carica le opzioni disponibili in modo dinamico. In alcuni casi, quando le diverse opzioni non possono essere selezionate, selezioniamo uno e disattivare il controllo. Questa necessità di inviare al server perché abbiamo bisogno di impostazione. (Sì, teoricamente, si potrebbe capire che il valore sarebbe sul backend, ma dal momento che la logica è già stato fatto, non c’è bisogno di complicare le cose.)
  • Beh, credo che questo è un morto di conversazione, ma qualcuno downvoted, quindi con voto positivo di esso.
  • Io non sono sicuro circa la sua situazione, ma qualcosa di simile è venuto per me, dove in ASP.net MVC dove sto presentando una lista di ingressi, e alcuni possono essere disabilitati (che indica il cambiamento nel valore) e altri possono essere abilitato (il loro valore è cambiato) Ma, quando il modulo viene presentato e analizzato il modello del raccoglitore, la sua comoda per vedere tutti i valori, non solo abilitato quelli. Per me, che è dove questo sarebbe di aiuto

 

7 Replies
  1. 37

    Si può fare il vostro campi readonly, questo non consentire modifiche al valore dei controlli.

    Edit: Si potrebbe facilmente scrivere un “serializeDisabled” la funzione, scorrere il modulo disattivato elementi che hanno un attributo di nome e utilizza il jQuery.param funzione alla fine, per generare la stringa serializzata:

    (function ($) {
      $.fn.serializeDisabled = function () {
        var obj = {};
    
        $(':disabled[name]', this).each(function () { 
            obj[this.name] = $(this).val(); 
        });
        return $.param(obj);
      }
    })(jQuery);
    • non è possibile fare una <select> casella di sola lettura… ancora un altro trucco è necessaria per fare quel lavoro
    • voglio il valore perché non voglio scrivere codice speciale per determinati campi (“questo campo è disabilitato/selezionare quindi devo ottenere il valore da qualche altra parte”). Voglio coerente/conciso codice che inserisce i valori in forma e poi quando questi campi vengono inviati indietro, posso utilizzare un set di codice per leggere i valori e il gioco è fatto. Voglio essere generico. Questo post non è una discussione sui concetti… sto cercando una risposta alla mia domanda
    • Posso sicuramente apprezzare non voler essere troppo concettuale, ma volete sapere la risposta a) di non essere un hack e b) fare qualcosa che html non fa per impostazione predefinita. E vuoi una risposta per essere il più ampio e generico possibile, che, se così fosse, sai bene, che sarebbe nativo di HTML e vuoi conoscere già la risposta. Prima di menzionare la casella di selezione, c’è una semplice risposta (CMS), ma il problema ha CONCETTUALMENTE più complicato, con la casella select dettaglio. Raffreddare e leggere l’addendum alla mia risposta.
    • ma questo non è HTML… è jQuery/ajax… e quelle librerie/plugins sono solo in bicicletta attraverso il DOM e afferrando i campi… che potrebbe facilmente prendere un extra opzione che dice “prendi disabili campi”. Suppongo che avrei dovuto chiedere più specificamente: c’è un’opzione per coloro plugin per non ignorare disabili campi
    • Bene, il mio 4 in funzione, sostanzialmente, dice che “afferrare disabili campi” con la creazione di nascosto ingresso con gli stessi dati. Io sono legittimamente curioso di sapere se quel “non riuscito” caratteristica ha fatto quello che si voleva. Con PHP, almeno, dati POST è identificato mediante il nome, e il select elemento è quello che porta il nome, non il option. Così non si vede più istanze di uno stesso POST dati? Come fai a sapere che era stato selezionato? Se si stanno dando ogni opzione un nome diverso, che sarebbe invalida e, a mio parere, un hack.
  2. 19

    Perché non semplicemente consentire a tutti i portatori di campi di input a destra prima della presentazione utilizzando .removeAttr() e .submit() .

    $('#my_form').submit(function(){
        $("#my_form :disabled").removeAttr('disabled');
    });
    • Why not simply enable all the disabled input fields right before the submission <– gli Utenti saranno in grado di vedere brevemente e sembra un po ‘ zoppo.
    • Sì, la nostra richiesta è stata di lavoro come questo prima ho risolto.
  3. 5

    OK… forse non ho chiesto la mia domanda abbastanza chiaramente… ma la risposta che stavo cercando è qui:

    http://docs.jquery.com/Plugins:Forms#.val.28.29_becomes_.fieldValue.28.29

    Ho detto ajaxSubmit() nella mia domanda, che proviene dal jQuery plug-in Forma… e all’interno del plug-in c’è un metodo chiamato campo (), che accetta un parametro chiamato “successo”. Se si passa a “true” poi il plug-in solo restituisce ciò che il W3C definisce come “di successo” controlli (il che esclude i controlli disattivati). ma se impostato a false, allora otterrà tutti i valori, a prescindere dal W3C definizione.

    Ho saputo che questo era possibile, dal momento che l’intera presentazione è controllata dal plug-in e non ha nulla a che fare con gli standard HTML/definizione… mi stavo chiedendo di verificare se questa opzione è già disponibile in questo plug-in o altri plugin. È disponibile in questo plugin, anche se il comportamento predefinito è quello di agire come una standard HTML presentare

  4. 3

    //jQuery(‘#contenitore :input’).serializeAll()

    (function($j) {
      $j.fn.serializeDisabled=function(){
        var obj={};
        $j(this).filter(':input:disabled').each(function(index,domElem){
          var $this=$j(domElem);
          obj[domElem.name]=$this.val(); 
        });
        return $j.param(obj);
      };
    
      $j.fn.serializeAll=function(){
        $this=$j(this);
        return $this.filter(':input:enabled').serialize()+'&'+$this.serializeDisabled();
      };
    })(jQuery);
  5. 2

    Prima: mi piace molto il CMS di risposta. Molto più semplice. Ma nel caso, non è l’opzione migliore…

    Perché non basta avere una funzione JQuery legato al modulo onsubmit evento che attraversa la forma e afferra l’ingresso per tutti <input>s in forma e consente loro e quindi invia il modulo? Hai bisogno di sapere se l’ingresso è disabilitato? Siete preoccupati che consentendo l’ingresso di cambiare l’aspetto visivo in un modo che riguarda l’utente?

    In entrambi i casi si può aggiungere qualcosa per gli elementi che si stanno attivando. Per lo styling, aggiungere una classe che dà accesso portatori di ingressi lo stesso aspetto come ingressi attivati. Se hai bisogno di sapere che sono stati disattivati, aggiungere qualcosa per il nome o il valore stesso per indicare lo stato.

    Per curiosità, quando mai si desidera che i disabili info? Se l’ingresso è sempre disattivato (cioè se l’utente non è in quel modo), non si conosce già il valore? E se l’ingresso è impostato su disabilitato dall’utente, non è un po ‘ ingannevole la raccolta di dati?

    Se il valore è disabilitato perché è qualcosa di simile a un “totale” di campo che gli aggiornamenti tramite js altri non disabili campi, mi piacerebbe andare con CMS per rendere di sola lettura, invece.


    In base alla sua risposta al CMS:

    Posso solo immaginare scenari in cui una casella di selezione dovrebbe essere disattivato, ma si vorrebbe che passati allo script. La principale che mi viene in mente è che alcune caselle di selezione vengono attivate quando le altre opzioni sono controllate, ma sarebbe meglio avere la forma di passare il valore predefinito della casella di selezione piuttosto che avere lo script del server occupano di riempire gli spazi vuoti.

    Se questo è il caso, perché non passare tra un input nascosto e la casella di selezione? Il valore e il nome sarà lo stesso per entrambi gli ingressi, ma se uno è abilitato, l’altro è disattivato. In questo modo lo script vede solo uno dei due ingressi, e dal momento che hanno lo stesso nome non ottenere catturati in cui i dati provengono da.


    $('form').submit(function() {
        $('[disabled]').each(function(i) {
            d_name = $(this).attr("name");
            d_val = $(this).val();
            $(this).after(
            '<input type="hidden" name="' + d_name + '" value="' + d_val + ' />'
            );
        });
    return true;
    });

    Solo nel caso in cui pensi che io sia troppo concettuale, ecco una semplice funzione che verrà eseguito su un utente invia. Notare come si passa attraverso ogni disabili elemento e aggiunge un nuovo input nascosto nel DOM, che ha lo stesso nome e che valore ha il tuo input nascosto, assicurando così che il tuo script lato server in grado di trattare tutti gli input in modo generico.

    • grazie per la tua risposta dettagliata. se vogliamo parlare concettualmente si tratta di cose, poi in windows form è sempre possibile ottenere il valore di un campo se è o non è abilitato/disabilitato. un campo ha un valore… la disabilitazione non ha nulla a che fare con il valore che essa contiene… ma questo è il web… e ho a che fare con esso. Ho un form con i campi e i campi sono valori.. di cui uno è una discesa per un rapporto che non può essere modificata dall’utente. ma voglio che la mia vita sarà facile, quindi posso solo impostare i valori in tutti i campi e poi li post (nessun hack/trucchi/soluzioni alternative). Penso di essere condannato tho
    • È davvero una discesa se l’utente non può cambiare? Hanno preso un colpo e poi è disabilitato, o era sempre qualcosa che potrebbe interagire con l’altro? Se non sono in grado di interagire con esso, quindi perché non solo, come un normale input che è di sola lettura? Qualcosa (presumo) deve essere l’impostazione, e che qualcosa potrebbe facilmente riempire un testo di input, giusto?
    • È frustrante, sono sicuro, che l’HTML non fa quello che sono utilizzati da Windows. Ho davvero infastidito che javascript non può fare tutto quello che PHP può. Ma questo non significa che non ottenere ciò che si vuole è semplice, né rende ogni soluzione di un hack. Si utilizza seleziona, per quello che posso dire, non sono realmente selezionabile a tutti. In qualunque modo la discesa diventa selezionato e poi disattivato, basta passare il valore di un input nascosto. Uno che o affrontare il fatto che hai scelto un input che non sia di sola lettura e la necessità di tenere conto nel tuo script del server.
    • Ho appena fatto una prova per essere sicuro che il codice che la mia risposta non funziona. Ero un po ‘ nervoso che il browser non comprendono eventuali ingressi aggiunto dopo che il modulo è stato inviato (anche se è sottolineata la funzione js), ma abbastanza sicuro, l’aggiunta di ingressi appaiono come dati presentati sull’altra estremità. Stesso nome, stesso valore, come promesso.
  6. 1

    È anche possibile riattivare i campi prima della presentazione utilizzando il seguente:

    $('#form').submit(function() {
        $('[disabled]').each(function(i) {
            var d_name = $(this).attr("name");
            var d_val = $(this).val();
            $(this).attr("disabled", false);
        });
        return true;
    });
    
    $('#form').submit();
  7. -1

    È possibile disattivare gli ingressi & prima di inviare il modulo si può riattivare in modo che il modulo saranno incluse durante la registrazione per il lato server

Lascia un commento