Ich habe hier ähnliche Fragen gefunden, aber nichts funktioniert für mich.
haben Eingaben wie:
<input type="text" value="2" name="pages_title[1]">
<input type="text" value="1" name="pages_title[2]">
versuchen, diese Felder wie folgt zu bekommen:
$('input[name="pages_title[]"]')
aber haben leere Ergebnisse :(
Wie bekomme ich alle Felder? Ich kann es nur so bekommen$('input[name="pages_title[1]"]')
Antworten:
Verwenden Sie den Start mit Selektor
$('input[name^="pages_title"]').each(function() { alert($(this).val()); });
jsfiddle Beispiel
Hinweis: In Übereinstimmung mit @epascarello besteht die bessere Lösung darin, den Elementen eine Klasse hinzuzufügen und auf diese Klasse zu verweisen.
quelle
Dies funktioniert normalerweise bei Kontrollkästchen und Optionsfeldern ... aber jeder Name sollte gleich sein.
<input type="text" value="2" name="pages_title[]"> <input type="text" value="1" name="pages_title[]"> var x = $('input[name="pages_title[]"]').val();
Das heißt, Sie erhalten alle Felder in durch Kommas getrennten Werten. Ich habe es nie mit Textfeldern versucht, kann es also nicht garantieren.
wie @John kommentierte: über sie zu iterieren.
$('input[name="pages_title[]"]').each(function() { var aValue = $(this).val(); });
EDIT: Nicht immer müssen Sie nur die OP-Fragen beantworten, manchmal müssen Sie ihnen bessere Methoden beibringen. (Entschuldigung, wenn das arrogant klingt)
KOMMENTAR: Definieren von Eingaben als
<input type="text" value="1" name="pages_title[1]"> <input type="text" value="2" name="pages_title[2]">
bricht das Array, jede Eingabe hat einen eindeutigen Namen, daher ist es kein Array mehr.
quelle
$('input[name="pages_title[]"]').each(function() { var aValue = $(this).val(); });
[1]
würde ein anderes Array darstellen als[2]
Mit der Map-Methode können wir Eingabewerte abrufen, die im Array gespeichert sind.
var values = $("input[name='pages_title[]']").map(function(){return $(this).val();}).get();
quelle
Sie müssen den Start mit Selektor verwenden
var elems = $( "[name^='pages_title']" );
Eine bessere Lösung besteht jedoch darin, den Elementen eine Klasse hinzuzufügen und auf die Klasse zu verweisen. Der Grund dafür ist ein schnelleres Nachschlagen.
quelle
name="pages_titles"
? Warum sollte man eine Klasse verwenden, wenn klarname
ist, dass sie dieselbe sein sollte? extra Aufschlag zum Spaß?^=
viel langsamer ist als ein Klassenselektor. Es muss Zeichenfolgen analysieren und nach Übereinstimmungen suchen. Und ich habe keine Ahnung, was du mit demname="pages_titles"
pages_titles
(anstelle vonpages_title
). Ich bin damit einverstanden, dass er seine Auswahl auf so etwas wie eingrenzen sollte,#divId[name='pages_title']
aber warum eine Klasse hinzufügen? Der Unterschied wäre so gering, dass er nicht bemerkt wird.add class
gesendet werden , und was Ihre Lösung betrifft, wird er auf der Serverseite keine Ergebnisse erhalten.Setzen Sie den Eingabenamen in einfache Anführungszeichen, sodass die Klammern
[]
als Zeichenfolge behandelt werdenvar multi_members=""; $("input[name='bayi[]']:checked:enabled").each(function() { multi_members=$(this).val()+","+multi_members; });
quelle
Sie können Ihren Eingabetextfeldern Klassennamen geben, wie folgt:
<input type="text" value="2" name="pages_title[1]" class="pages_title"> <input type="text" value="1" name="pages_title[2]" class="pages_title">
und iteriere so:
$('input.pages_title').each(function() { alert($(this).val()); });
quelle
Ich denke, der beste Weg ist, ein Propper-Formular und jQuery.serializeArray zu verwenden .
<!-- a form with any type of input --> <form class="a-form"> <select name="field[something]">...</select> <input type="checkbox" name="field[somethingelse]" ... /> <input type="radio" name="field[somethingelse2]" ... /> <input type="text" name="field[somethingelse3]" ... /> </form> <!-- sample ajax call --> <script> $(document).ready(function(){ $.ajax({ url: 'submit.php', type: 'post', data: $('form.a-form').serializeArray(), success: function(response){ ... } }); }); </script>
Die Werte werden in PHP als verfügbar sein
$_POST['field'][INDEX]
.quelle
Sie können den eckigen Klammern mit doppelten Schrägstrichen wie folgt entkommen:
$('input[name="pages_title\\[\\]"]')
quelle
Sie können den Contain-Selektor verwenden:
$( document ).on( "keyup", "input[name*='pages_title']", function() { alert($(this).val()); });
quelle
Am häufigsten wird Folgendes verwendet:
$("input[name='varname[]']").map( function(key){ console.log(key+':'+$(this).val()); })
Whit, dass Sie den Schlüssel des Array-Besitzes und den Wert erhalten.
quelle
Um ein Element anhand eines Attributs mit einem bestimmten Merkmal auszuwählen, können Sie einen neuen Selektor wie im folgenden Snippet mithilfe eines Regex-Musters erstellen. Die Verwendung von Regex soll den neuen Selektor so flexibel wie möglich gestalten:
jQuery.extend(jQuery.expr[':'], { nameMatch: function (ele, idx, selector) { var rpStr = (selector[3] || '').replace(/^\/(.*)\/$/, '$1'); return (new RegExp(rpStr)).test(ele.name); } }); // // use of selector // $('input:nameMatch(/^pages_title\\[\\d\\]$/)').each(function(idx, ele) { console.log(ele.outerHTML); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="text" value="2" name="pages_title[1]"> <input type="text" value="1" name="pages_title[2]"> <input type="text" value="1" name="pages_title[]">
Eine andere Lösung kann basieren auf:
var selectedEle = $(':input[name^="pages_title"]').filter(function(idx, ele) { // // test if the name attribute matches the pattern..... // return /^pages_title\[\d\]$/.test(ele.name); }); selectedEle.each(function(idx, ele) { console.log(ele.outerHTML); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="text" value="2" name="pages_title[1]"> <input type="text" value="1" name="pages_title[2]"> <input type="text" value="1" name="pages_title[]">
quelle