2012-03-25 11 views
6

Kann mir bitte jemand wissen, wie man Werte aus mehreren Eingabefeldern bekommen?Erhalten Array von Werten aus mehreren Eingaben mit jQuery

Ich habe eine Liste mit mehreren Eingängen wie folgt aus:

<li> 
<label>Additional Title: </label><input type='text' name='additionaltitlename' ... /> 
</li> 
<li> 
<label>Additional Title: </label><input type='text' name='additionaltitlename' ... /> 
</li> 

ich eine Lösung in Javascript haben (auf Formular):

... 
var extratitles = document.getElementsByName('additionaltitlename'); 
var str = ''; 
     for (var i = 0; i < extratitles.length; i++) { 
     str = str + '|' + extratitles.item(i).value; 
    } 
} 

Wie kann ich die gleiche Sache in JQuery tun?

Antwort

16

Es ist nicht zulässig, zwei Eingänge mit demselben Namen zu haben. Wenn Sie dies tun möchten, können Sie <input name="titles[]">

können Sie dies versuchen:

<input name="titles[]"> 
<input name="titles[]"> 
​<button>submit</button>​​​​​​​​​​​​​​​​​​​​​​​ 

Mit diesem jQuery

// click handler 
function onClick(event) { 
    var titles = $('input[name^=titles]').map(function(idx, elem) { 
    return $(elem).val(); 
    }).get(); 

    console.log(titles); 
    event.preventDefault(); 
} 

// attach button click listener on dom ready 
$(function() { 
    $('button').click(onClick); 
}); 

See it working here on jsFiddle

EDIT

Diese Antwort gibt Sie die Titel in einem Array anstelle einer Zeichenfolge usin g ein | Separator. Persönlich finde ich das viel brauchbarer.

Wenn Sie nur das Formular abschicken und Sie möchten mehrere Werte unterstützen, verwenden Sie die .serialize Methode wie in der anderen Antwort beschrieben

+0

Warum nicht 'this.value' verwenden? Ist es wirklich notwendig, _jQuery_ für jede einfache Operation zu verwenden? –

+0

@IulianOnofrei, [Sie sagen mir, wenn es notwendig ist] (https://github.com/jquery/jquery/blob/master/src/attributes/val.js#L10-L69). Der Sinn der Verwendung einer Lib wie jQuery besteht darin, a) Bedenken in der Mehrzahl der Fälle zu mildern und b) eine konsistente, intuitive API bereitzustellen. Ja, für INPUT-Elemente können Sie 'this.value' ziemlich zuverlässig verwenden, aber das ändert sich für Dinge wie SELECT. So oder so, jQuery ist es egal und gibt Ihnen eine intuitive '.val' Methode um in jedem Szenario zu arbeiten. –

+0

@IulianOnofrei, außerdem habe ich eine Antwort zur Verfügung gestellt, die jQuery verwendet und mit jQuery-Idiomen geschrieben *, weil * diese Frage mit 'jquery' markiert wurde. Wenn das eine JavaScript-Frage von Vanille wäre, hätte ich das völlig anders beantwortet. –

2

Verwenden jQuerys nativer serialize Funktion:

var data = $('input[name="additionaltitlename"]').serialize(); 

docs

Die .serialize() Methode erstellt eine Textzeichenfolge in Standard-URL-kodierten Notation. Es arbeitet mit einem jQuery-Objekt, das eine Gruppe von Formularelementen darstellt.

+0

Das ist wirklich nicht die Titel in funktionsfähiger Form setzen, wenn er will, zusätzlich zu tun Verarbeitung mit Javascript –

+0

@macek. er schrieb, er wolle sich Werten mit Ajax-Anfrage unterwerfen. 'serialize()' ist die native Lösung. – gdoron

0

Mittel:

str = ''; 
$("input[type='text']").each(function() { 
str = str + '|' + $(this).val(); 
}); 

oder

str = ''; 
$("input[name='additionaltitlename']").each(function() { 
str = str + '|' + $(this).val(); 
}); 

?

0

Neben @ gdoron oder @ maceks Antwort, die wahrscheinlich der Weg zu gehen sind, möchte ich hinzufügen, dass alles, was mit dem Code falsch ist, dass Sie einen } zu viel haben. Das funktioniert (obwohl es immer noch Raum für Verbesserungen hat):

$('#getpreviewbutton').click(function(){ 

    var extratitles = document.getElementsByName('additionaltitlename'); 
    var str = ''; 
      for (var i = 0; i < extratitles.length; i++) { 
      str = str + '|' + extratitles.item(i).value; 
      } 

});​ 

See: http://jsfiddle.net/8XJcc/

Ich weiß nicht, welchen Browser Sie verwenden, aber wie Firebug oder den Chrome Dev-Tools können ziemlich praktisch mit sth solche Fehler zu entdecken. Siehe this reference für Chrome oder this one für Firefox. Selbst IE hat einen - drücken Sie einfach F12.

Verwandte Themen