2010-05-18 5 views
11

Ich habe ein Formular, wo der Benutzer einen Link eingeben können, klicken Sie auf die Schaltfläche "Link hinzufügen", und dieser Link ist dann (über jQuery) als verstecktes Feld zum Formular hinzugefügt. Das Problem ist nicht POST, wenn ich das Formular absende. Es fängt wirklich an, mich zu verwirren. Die Sache ist, dass, wenn ich ein verstecktes Feld in das Formular fest codiere, es veröffentlicht wird, aber meine Funktion nicht aus irgendeinem Grund funktioniert. Das versteckte Feld wird meinem Formular hinzugefügt, wie ich es bei Firebug sehen kann, aber es wird einfach nicht mit den POST-Daten gesendet.HTML Formular Hidden Felder hinzugefügt mit Javascript nicht POSTing

Nur zu beachten, verwende ich ein Array in Javascript, um die Elemente zu halten, bis das Formular eingereicht wird, die sie auch sichtbar für den Benutzer veröffentlicht, um zu sehen, was sie hinzugefügt haben. Ich benutze [] -Notation im Feld "name" des Elements, weil ich möchte, dass die Links in PHP in ein Array fließen.

Hier ist der Link Schöpfung, die zu meiner Form angehängt wird:

 function make_hidden_element_tag(item_type, item_content, item_id) 
{ 
    return '<input type="hidden" name="' + item_type + '[]" id="hidden_link_' + item_id + '" value="' + item_content + '"/>'; 

Hat jemand eine Idee, warum dies nicht veröffentlichen werden könnte. Wie oben erwähnt, funktionieren alle hartcodierten Tags, die fast identisch mit den obigen sind, gut, es ist nur, dass dieses Tag nicht funktioniert. Hier ist, wie ich den Tag in die Form mit JQuery bin Zusatz:

$('#link_td').append(make_hidden_element_tag('links', link, link_array.length - 1)); 

Ich bin mit dem Kohana 3 Rahmen, obwohl ich nicht sicher bin, dass jedes Lager auf das hat, weil es nicht wirklich etwas zu tun, von Die Zeit, zu der der HTML-Code zur Seite hinzugefügt und die Schaltfläche zum Senden gedrückt wird.

Antwort

2

Ich habe gerade herausgefunden, was das Problem war. Es ist mir peinlich und verwirrt. Wie gesagt, verwende ich Kohana Framework. Nicht sicher, dass das etwas damit zu tun hat, aber es könnte wichtig sein.

hatte ich meine Elemente in dieser Reihenfolge:

<table> 
    <form> 
     .............form stuff....... 
    </form> 
</table> 

und es war meine zusätzlichen Daten nicht so dass die POST-Array verbinden, wenn das Formular abschicken, auch wenn die Elemente, die „hart codiert“ mit Kohana des FORM wurden Klasse funktionierte gut. Mir ist gerade aufgefallen, dass das vor der ganzen Branche kam. Ich hatte darauf geachtet, dass ich eine Form :: close in meiner Kohana-Ansicht hatte, aber ich hatte nie gedacht, dass sie unmittelbar nach dem Eröffnungs-Tag schließen würde.

Vielen Dank für die Hilfe. Dies ist einer dieser Bugs, die einfach keinen Sinn ergeben haben, aber ich denke, es macht irgendwie Sinn, warum das $ .append vorher nicht funktionierte. Ich schaute immer und sah, dass es direkt an die anderen Tags anschloss, die mit den POST-Daten gesendet wurden, und nahm an, dass all dies innerhalb der FORM geschah.

Kann jemand erklären, warum die Notwendigkeit, die im Gegensatz zu umgekehrt kapseln, um für HTML es richtig zu rendern? Oder ist das eher eine Kohana-Frage?

Vielen Dank für die Hilfe von allen, dies war eine gute (aber sehr frustrierende) Lektion.

+1

Nun, ich hätte persönlich Tabelle innerhalb Formularelement und nicht die aktuelle Form (Formular innerhalb der Tabelle), so dass was Eingabe/select/Textarea ich innerhalb der Tabelle automatisch hinzugefügt wird, um das Formular hinzugefügt. ................ Siehe meinen letzten Kommentar mit der sehr gezielten Frage - ist #link_td Element innerhalb des Formularelements? :) –

+0

@master, es ist/war in der Tabelle und in der Form .... das Formular direkt vor dem Tag geschlossen, so dass ich kein Problem damit wirklich gesehen habe. Ich bin mir nicht sicher, warum dies von Bedeutung wäre, da der Tabelle unmittelbar gefolgt wurde, indem das Formular-Tag und das Closing-Formular-Tag unmittelbar gefolgt von dem Schließen des Tabellen-Tags geöffnet wurden. Nicht sicher, ich verstehe, was das Problem noch war. – dscher

+0

Es ist wichtig. Nur um sicher zu gehen, dass Leute, die folgen, dies lesen. – mplungjan

2

liebe benutze das jquery's plugin um html dom elemente dynamisch hinzuzufügen, was ist #link_td ??

+0

#link_td ist eine Tabellenzelle, in der ich die versteckten Links versteckt habe. .anbringen? - Wenn es ein anderes jQuery-Plugin gibt, das benötigt wird, um HTML-Elemente anzuhängen, weiß ich es nicht ... und ich würde es lieber nicht verwenden. Das ist kein Hexenwerk wirklich, es ist ziemlich einfach, denke ich. – dscher

+0

Ja, das ist nicht wirklich eine Raketenwissenschaft, Sie fügen die '' string statt das dom durch jquery/javascript zu erstellen – Chirag

+0

jQuery ist schlau genug, um den Knoten für Sie hinzuzufügen – CurtainDog

5

Wenn die Daten nicht auf dem Server bereitgestellt werden, wird das Eingabeelement definitiv nicht zum Formular hinzugefügt.

Versuchen Sie das folgende Stück Code vor Formulareinreichung Ausführung:

<form onsubmit="return doBeforeSubmit(this);"> ... </form> 

und die Funktion ist ...

function doBeforeSubmit(form) 
{ 
    var es = form.elements; 
    var l = es.length; 

    var msgs = []; 

    for(var idx = 0; idx < l; idx++) 
    { 
     var e = es[idx]; 
     msgs.push('name=' + e.name + ', type=' + e.type + ', value=' + e.value; 
    } 

    alert(msgs.join('\n')); 
    return false; 
} 

Wenn Sie nicht bekommen Ihr Feld, dann die „Eingabe“ wird dem Formular nicht hinzugefügt, sondern an anderer Stelle.

Wenn Sie das Feld bekommen ... müssen wir tiefer graben.

+1

Ebenso lohnt es sich, Firebugs Net-Panel kennenzulernen und zu lieben. – CurtainDog

+1

@master und @curtaindog, ich benutze bereits das Firebug Net Panel und liebe es wirklich. Leider werden meine Daten nicht in den POST-Daten an den Server gesendet, wenn das Formular abgeschickt wird. Wie oben erwähnt, hängt das versteckte Element , das ich hinzufügen möchte, an mein Dokument genau an, wo ich es möchte, wenn ich meine Javascript-Funktion ausführe ... es endet einfach nicht in den POST-Daten. Auch mein verstecktes Element sieht genauso aus wie das hartcodierte, das in der Form ist und IS an POST übergeben wird. Ich frage mich, ob es ein Framework-Problem ist? – dscher

+0

Haben Sie Ihr Feld in der Liste der Elemente im Formular angezeigt? –

Verwandte Themen