无法读取未定义的属性’indexOf’

我正在尝试为jquery中的几个日期选择器设置不同的选项。 我的代码看起来像这样:

{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} 

但如果foreach中有多个项目,我的js控制台显示错误无法读取第一次迭代的未定义属性’indexOf’,只有最后一次是好的。 有人可以帮帮我吗?

在我的代码我结合模板系统Latte和jquery。

这是我在浏览器中的最终代码:

 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'), }) } 

谢谢你的任何建议

如果你在循环中这样做,你会继续覆盖数组!

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

将数组声明移到循环外部或在创建新数组之前检查它是否存在。

你可以先测试字符串,然后使用indexOf,例如:

 var mydate; for(i=0; i