2012-06-07 7 views
5

Ist es möglich, den Wert eines verborgenen Eingabefeldes als ein Array zu haben und es dann an den Spring MVC Controller übergeben zu lassen?Javascript Hidden Input Array

function foo(){ 
var myArray = new Array(); 
myArray[0] = "Hello"; 
myArray[1] = "World!"; 
document.getElementById("hiddenInp").value=myArray; 
} 

Und dann in der Steuerung etwas tun, wie

@RequestMapping ... 
public String test(HttpServletRequest request){ 
String[] myArray = request.getParameter("hiddenInp"); 
// Assuming that the name of the hidden input field is also hiddenInp 
System.out.println(myArray[0] + myArray[1]); 
... 
} 

Wie wäre es, wenn ich mit einem assoziativen Array arbeite? Wo die Indizes Zeichenfolge statt Int

sind
+0

JavaScript hat keine assoziativen Arrays. – Sampson

+0

@ JonathanSampson Vielleicht verwende ich den falschen Begriff. Ich meinte, anstelle von Index wie "0" und "1", mache ich 'myArray [" A "] =" Hallo ";'. Ich weiß, dass das funktioniert, weil ich 'alert (myArray [" A "])' 'versucht habe und es mir die Popup-Box mit" Hello "gibt. – szrrizvi

+0

@ JonathanSampson: Aber Objekte können (und werden) als Karten verwendet werden ... – Bergi

Antwort

13

Ihre beste Option wäre stringify das Array und dann zuweisen.

element.value = JSON.stringify(["Hello", "World"]); 

Der resultierende Wert wird eine JSON Zeichenfolge sein, die das Array neu erstellen können dann auf dem Server, analysiert werden. Dieser Ansatz funktioniert auch für Objekte, wenn Sie etwas haben möchten, das einem assoziativen Array ähnelt.

Ich sollte beachten, dass, während JSON heute eine ziemlich gute Unterstützung in Browsern hat, ältere Browser es möglicherweise nicht unterstützen. Sie können polyfill the feature fairly easily in diesen Fällen:

+1

nicht notwendig zu tun. Den Wert als Array zu setzen wird genau das tun, was .join() tut. Verwenden von .join() ist nur zusätzliche Verarbeitung für nichts. – Ian

+0

@ianpgall Bekannt. Ich vergesse zu vergessen, dass JavaScript automatisch die Umwandlung eines Arrays in den entsprechenden Typ und Wert übernimmt. – Sampson

+0

Ich hatte nicht erwartet, dass es funktioniert - ich dachte, es könnte "[" und "]" enthalten, aber es funktionierte trotzdem wie .join(). kein Problem, wollte nur darauf hinweisen! – Ian

1

Wie auch immer Sie es in Javascript setzen, müssen Sie es auf dem Server analysieren. Das bedeutet wahrscheinlich, dass Sie den Wert mit "," in ein C# -Array aufteilen und dann darauf zugreifen, wie Sie möchten. Alle Werte, die bei einer Formularübermittlung gesendet werden, werden als Zeichenfolge genau wie sie sind gesendet.

Sie können http://www.w3schools.com/jsref/jsref_join.asp verwenden, um den Wert des ausgeblendeten Eingangs festzulegen. Es ist jedoch nicht notwendig - es scheint in Ordnung zu sein, ohne .join(). Beachten Sie jedoch, dass der Wert eine Zeichenfolge auf dem Server und kein Array ist.

+0

Werfen Sie einen Blick auf http://w3fools.com/ – Bergi

+0

Ja, ich sah das vor langer Zeit. Während ich denke, dass das lustig ist, hat es nichts damit zu tun, w3 Schulen für einfache Referenzen zu verwenden. Ich stellte den Link zur Verfügung, damit das OP die Syntax korrekt verwenden kann, nicht als Lösung (zumal ich sage, dass .join() nicht verwendet werden sollte). – Ian

1

Sie können nur einen String als Parameter übergeben, ebenso wie den Wert eines Inputs. Das bedeutet, dass Array automatisch in eine Zeichenkette umgewandelt wird, indem Sie es mit ";" verbinden, das können Sie auch manuell mit der .join() method tun.

Serverseite müssen Sie dann diese Zeichenfolge durch das gewählte Trennzeichen aufteilen.

Wenn Sie sie als Array gesendet werden soll, afaik werden Sie zwei Eingabeelemente benötigen:

<input type="hidden" name="hiddenInp[]"<!-- should be more descriptive --> value="a" /> 
<input type="hidden" name="hiddenInp[]"<!-- the same name --> value="b" /> 
+0

Sie können den Wert eines Eingangs als Array festlegen. javascript tut im Prinzip was .join() WÜRDE, aber es ist nicht notwendig, .join() zu verwenden, es sei denn, Sie möchten ein anderes Trennzeichen als "," – Ian

+0

Das ist genau das, was ich gesagt habe. Allerdings würde ich sogar .join (",") verwenden, um deutlich zu machen, dass ich eine Zeichenfolge festlege. – Bergi

0

fand ich die Antwort in über folgende link.

Wenn Sie eine beliebige JavaScript-Objekt oder ein Array zuweisen möchten tun es wie folgt: Vorlage

var javascript_variable = 'object' or ['fruit1', 'fruit2', 'fruit3']; 
$('#hiden_input_element_unique_id').val(JSON.stringify(javascript_variable)); 

Nach Form, in der server wir sie entschlüsseln haben wie folgt:

$fruits_array = json_decode($_POST['hiden_input_element_unique_name']); 

Diese So können Sie ein beliebiges JavaScript-Array auf der Serverseite, das Sie per JavaScript in ein Formularelement setzen, auf der Client-Seite bekommen!

+0

@Flexo danke für die Anleitung und die Bearbeitung! Wird in der Zwischenzeit folgen! :-) –