J'ai le code suivant:

_.filter($('.date-field'), function(n) { return n.val() });

Où n est censé être les éléments sélectionnés:

<input class="date-field" id="return-date" placeholder="return date" type="text" value="xyz">

Je veux obtenir la valeur de chaque élément avec la classe .date-field mais quand je le fais n.val(). Il renvoie une erreur:

TypeError non capturé: n.val () n'est pas une fonction

Que devrais-je faire?

0
Chris Yeung 21 juil. 2015 à 17:50

3 réponses

Meilleure réponse

_.filter est utilisé pour filtrer une collection de N éléments vers une autre collection de N éléments ou moins.

Si vous souhaitez transformer chaque élément d'une collection, vous devez utiliser _.map:

var results = _.map($('.item'), function(item) {
  return item.value;
});
$('.result').text(JSON.stringify(results));
<script src="http://underscorejs.org/underscore-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
  <input type="text" class="item" value="1"/>
  <input type="text" class="item" value="2"/>
  <input type="text" class="item" value="3"/>
</form>
<div class="result"></div>

JQuery possède également une fonction de carte que vous pouvez utiliser à la place de lodash, si vous le souhaitez.

3
Will Demaine 21 juil. 2015 à 16:11

Vous avez besoin d'un tableau traditionnel. Essayez d'utiliser get () et value

_.filter($('.date-field').get(), function(n) { return n.value });

Mettre à jour

var dates = [];
$('.date-field').each(function(){
    dates.push($(this).val());
});
//you can use the date values here with dates
-2
AmmarCSE 21 juil. 2015 à 15:08

Si vous avez besoin de valeurs d'entrée, il est préférable d'utiliser _.map au lieu de _.filter

_.map($('.date-field'), function(n) {  return n.value });
0
abs 21 juil. 2015 à 16:02