Impossible de lire la propriété 'indexOf' de undefined

J'essaie de définir différentes options pour plusieurs datepickers dans jquery. Mon code ressemble à ceci:

{foreach $cart->getItems() as $item} {if $item->action->prereservation} var disableDates = new Array(); {if $item->action->hasVariants()} disableDates[{!$item->id}] = {$disabledDates[$item->action->id][$item->idVariant]}; {else} disableDates[{!$item->id}] = {$disabledDates[$item->action->id]}; {/if} if (disableDates[{!$item->id}].length !== 0) { $(".datepicker_"+'{$item->id}').datepicker({ maxDate: new Date('{!$item->action->voucherTo|date: Ymd}'), beforeShowDay: function(date){ var string = jQuery.datepicker.formatDate('yy-mm-dd', date); console.log(disableDates[{!$item->id}]) // result is undefined (but not for last iteration) return [ disableDates[{!$item->id}].indexOf(string) == -1 ] } }) } else { $(".datepicker_"+'{$item->id}').datepicker({ maxDate: new Date('{!$item->action->voucherTo|date: Ymd}'), }) } {/if} {/foreach} 

Mais si il y a plus d'un élément dans foreach, mon js console show error Impossible de lire la propriété 'indexOf' de indéfinie pour la première itération, seule la dernière est bonne. Est-ce que quelqu'un peut m'aider s'il vous plaît?

Dans mon code Im combinant le système de modèle Latte et jquery.

C'est mon dernier code dans le navigateur:

 var disableDates = new Array(); disableDates[777955] = ["2014-07-25","2014-07-26","2014-07-27","2014-07-28","2014-07-29","2014-07-30","2014-07-31"]; if (disableDates[777955].length !== 0) { $(".datepicker_"+'777955').datepicker({ maxDate: new Date('2014-07-31'), beforeShowDay: function(date){ var string = jQuery.datepicker.formatDate('yy-mm-dd', date); return [ disableDates[777955].indexOf(string) == -1 ] } }) } else { $(".datepicker_"+'777955').datepicker({ maxDate: new Date('2014-07-31'), }) } 

Merci pour tous les conseils

Si vous faites cela dans une boucle, vous continuez à remplacer le tableau!

 var disableDates = new Array(); disableDates[123] = 123; console.log(disableDates[123]); //123 var disableDates = new Array(); disableDates[456] = 456; console.log(disableDates[123]); //undefined 

Déplacez la déclaration de tableau en dehors de la boucle ou vérifiez si elle existe avant de créer une nouvelle matrice.

Vous pouvez d'abord tester la chaîne, puis utiliser indexOf, par exemple:

 var mydate; for(i=0; i<mydate.length; i++) { if( mydate[i] ) { if(mydate[i].indexOf("some") { alert("OK"); } } }