Deaktivierte Felder werden von serializeArray nicht erfasst

Lesezeit: 3 Minuten

Benutzer-Avatar
Stefan

(Frage aktualisiert, um das tatsächliche Problem widerzuspiegeln)

Das ist mir gerade klar geworden serializeArray ruft keine Inhalte aus deaktivierten Feldern ab.

Eine Reihe von (Straßen-) Adressfeldern wird ausgefüllt, indem ein Element aus a ausgewählt wird autosuggest aufführen. Sobald dies geschehen ist, werden die Felder deaktiviert. Ich könnte das ändern auf read onlyaber ich möchte das deaktivierte Aussehen und Verhalten, ohne CSS ändern zu müssen.

Gibt es eine Möglichkeit zu haben serializeArray Daten aus den deaktivierten Feldern holen?

Lösung

Dank Mohammad habe ich ein kleines Plugin erstellt, das mir bei der Lösung meines Problems hilft:

(Geige)

    var form_data = $('form').serializeAll();

    (function ($) {
      $.fn.serializeAll = function () {
        var data = $(this).serializeArray();

        $(':disabled[name]', this).each(function () { 
            data.push({ name: this.name, value: $(this).val() });
        });

        return data;
      }
    })(jQuery);

  • Haben Sie ein Namensattribut in Ihren dynamisch hinzugefügten Elementen?

    – Mohammed Adil

    11. April 2013 um 20:59 Uhr

  • Ja. Alle Eingabefelder, die eingereicht werden müssen, haben das name-Attribut. Oh, ein wichtiger Hinweis, die Felder sind deaktiviert! (Entschuldigung – ich werde Q aktualisieren)

    – Stefan

    11. April 2013 um 21:00 Uhr


  • Das ist der Grund, warum serializeArray diese Elemente nicht auswählt

    – Mohammed Adil

    11. April 2013 um 21:04 Uhr

  • Mögliches Duplikat von Wie kann $.serialize() diese deaktivierten :input-Elemente berücksichtigen?

    – BlaM

    14. August 2017 um 8:08 Uhr

Benutzer-Avatar
Mohammed Adil

Versuche dies

var data = $('form').serializeAllArray();

Und hier ist das kleine Plugin, das verwendet wird

(function ($) {
  $.fn.serializeAllArray = function () {
    var obj = {};

    $('input',this).each(function () { 
        obj[this.name] = $(this).val(); 
    });
    return $.param(obj);
  }
})(jQuery);

Sie können auch versuchen, alle Ihre Elemente zu aktivieren, nur um sie zu serialisieren, und sie dann nach der Serialisierung deaktivieren.

var myform = $('#form');
var disabled = myform.find(':input:disabled').removeAttr('disabled');
var serialized = myform.serializeArray();
disabled.attr('disabled','disabled');

  • Was wirklich den Tag ausmachen würde, wäre, wenn du das umziehst serializeArray in das neue Plugin eingefügt und dort die Daten verkettet. Dann musste ich nur noch data = $('form').serializeAllArray().

    – Stefan

    11. April 2013 um 21:13 Uhr

  • @Steven Ich weiß, es ist ein paar Jahre her, aber könnten Sie diese Referenz in Zeile 11 erklären? Warum brauchen Sie das in der Auswahl?

    – NorCalKnockOut

    23. März 2017 um 16:13 Uhr

  • @NorCalKnockOut, du jetzt, ich kann mich nicht wirklich erinnern, wie $(':disabled[name]', this).each() funktioniert. Ich bin auf meinem jQuery nicht in Form. Es tut uns leid :-/

    – Stefan

    23. März 2017 um 19:26 Uhr

  • @Steven Ich habe es herausgefunden. dies ist der Verweis auf das Formular selbst.

    – NorCalKnockOut

    24. März 2017 um 21:31 Uhr

  • @MohammadAdil behandelt nur die Eingabe-Tags und nicht die Tags select und textarea

    – Ridhuvarschan

    24. Januar 2018 um 10:30 Uhr

Sie können verwenden readonly
serializeArray() kann es lesen.

  • Leider readonly funktioniert nicht bei

    1186580cookie-checkDeaktivierte Felder werden von serializeArray nicht erfasst

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy