Frage

Ich habe eine Seite mit 2 Formen und einem versteckten Feld, das außerhalb der beiden Formen ist.

Wie kann das versteckte Feld mit einem der Formulare eingereicht werden?

Ich dachte an so etwas wie dies mit jQuery tun:

<script type="text/javascript">
    $(function() {
        $('form').submit(function() {
            // do something to move or copy the
            // hidden field to the submitting form
        });
    });
</script>

Wird diese Arbeit? Jede andere Ideen?

EDIT

Das versteckte Feld speichert eine serialisierte Objektgraphen, die sich nicht verändert. Beide Servermethoden erfordern das Objekt. Das serialisierte Objekt String kann ziemlich heftige, so dass ich nicht will, dass diese Sache vom Server 2 Mal herabgesandt hat.

War es hilfreich?

Lösung

Sie können einfach eine Kopie des Elements in jede Form kurz vor Vorlage injizieren. Auf diese Weise können Sie die Möglichkeit haben, für jede versteckte Formularfeld unterschiedliche Informationen, ohne die anderen zu beeinflussen.


So etwas wie folgt aus:

<script type="text/javascript">
    $(function() {
        $('form').submit(function() {
            $("#hidden_element").clone().appendTo(this);
        });
    });
</script>

Wenn Sie das exakt gleiche Element für beide Formen verwenden möchten, ohne eine neue Kopie zu erstellen, verwenden Sie einfach nicht clone()


Siehe Dokumentation für clone () und appendTo ()

EDIT:

Wenn Sie nicht wollen, mit jeder Anfrage das versteckte Element senden sendet das Formular aus. Betrachten Sie es in der Datenbank für diesen Benutzer zu diesem Zeitpunkt zu speichern. Sie können ihre Inhalte nur einmal, und nur einmal für jede Seite neu laden einreichen, und dann einfach mit jedem Formular senden Sie die Datenbank-ID des verborgenen Elements senden.

Auf Seite zu laden, so etwas wie folgt aus:

$.post("page.php", { reallyBigObject : $("#hiddenfield").val() }, function(insertedID){
  $("#hiddenfield").val(insertedID);
});

Dann auf dem serverseitigen Code:

//insert $_POST["reallyBigObject"] into databse
//get the just inserted id (in php it's done with mysql_insert_id())
//echo, or print the just inserted id, and exit

Auf diese Weise Ihre js erhält den Rückruf.

Nun können Sie das Formular aus, als würden Sie, aber dieses Mal sind Sie nur das Senden der ID (ganze Zahl) an den Server. Anschließend können Sie das Objekt einfach auf dem Server löschen (einen cron es nach X Höhe der Zeit zu tun, oder eine andere Anforderung, sie löschen senden.

Ehrlich gesagt, obwohl, wenn Sie das Objekt ist riesig (!!), ich denke, es zu speichern, indem sie es nur einmal einreichen viel komplexer ist, als die Ausführung einfach zwei Anfragen an den Server senden.

Lassen Sie mich wissen, wenn Sie Fragen haben ...

Andere Tipps

Mit HTML5 können Sie ein „Form“ Attribut mit einem Eingangselement umfassen. Der Wert des Form-Attribut ist die ID der Form (en) das Feld gehört. Um das Feld in mehr als einer Form zu umfassen, sind alle Form-IDs in einer durch Leerzeichen getrennte Liste. Leider ist das Form-Attribut nicht in IE unterstützt (wie von IE 9). FF und Chrome Unterstützung Start in Version 4 bzw. 10.

Fügen Sie das Feld zu beiden Formen bei Seite zu laden:

$(function() {
    $('#form1, #form2').append($('input[name=fieldName]'));
});

Angenommen, Sie ein nicht Ajax tun, reichen Sie nur das Feld in das Formular abgeschickt werden hängen könnten. Allerdings, wenn Sie diese Informationen in beiden Formen müssen, ist es nicht besser, diese Wert Server-Seite in einem Session-Speichern zu speichern. Auf diese Weise alle nicht js Kunden wird auch funktionieren!

 $(function() {
        $('form').submit(function() {
             $('input.yourhiddenSubmit').appendTo(this);
        });
    });

Der einzige Weg, um die Variable in der nächsten Form zu übergeben ist, dass der Variable in den Daten zu haben, die übergeben wird, wenn das Formular abgeschickt wird (entweder GET oder POST), es sei denn, Sie AJAX verwenden mögen. Vorausgesetzt, dass Sie die verborgene Variable außerhalb der eigentlichen Form für einen „guten Grund“ haben wollen, würde ich empfehlen, jQuery mit dem versteckten Eingabefeld in das Formular aufzunehmen kurz vor Vorlage, etwa so:

<script type="text/javascript">
    $(function() {
        $('form').submit(function() {
            $(this).append("<input type='hidden' name='hiddenField' value='"+$("#hiddenField").val()+"' />");
            return true;
        });
    });
</script>

Ersetzen Sie alle Instanzen von „Hidden“ mit der ID Ihrem versteckten Feld außerhalb der Form. Dadurch wird eine neue Eingabe innerhalb des Formulars erstellen, bevor es mit dem Wert des verborgenen Feldes ausgesetzt wird, die an anderer Stelle auf der Seite.

Darüber hinaus würden Sie ein bisschen genauer zu wissen, was Ihr genaues Problem war sein müssen (und warum das Feld in der Form nicht enthalten ist) für mich zu helfen.

Beachten Sie, dass der obige Code in der Theorie funktionieren soll, aber ich habe keine Chance, es tatsächlich zu testen selbst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top