私は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: Y-m-d}'),
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: Y-m-d}'),
})
}
{/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<mydate.length; i++) {
if( mydate[i] ) {
if(mydate[i].indexOf("some") {
alert("OK");
}
}
}