Non è possibile leggere la proprietà ‘indexOf’ undefined

sto cercando di impostare diverse opzioni per diversi datepickers in jquery.
Il mio codice è simile a questo:

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

ma se c’è più di un elemento in un ciclo foreach, il mio js console show di errore Impossibile leggere la proprietà ‘indexOf’ undefined per la prima iterazione, solo l’ultima è buona. C’è qualcuno che può aiutarmi per favore?

Nel mio codice Im combinazione di sistema di template di Latte e jquery.

Questo è il mio codice finale nel browser:

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

Grazie per eventuali consigli

Poco prima del ritorno, fare un console.log(disableDates[{!$item->id}]) _ ” la Mia ipotesi è, questo restituisce undefined
abbiamo bisogno del tuo getItems funzione
ho la modifica alla mia domanda con codice finale nel browser
hai ragione, ma se guardo il codice finale nel browser, sembra ok penso

OriginaleL’autore Lukeluha | 2014-07-23

2 Replies
  1. 3

    Se si sta facendo in un ciclo, a tenere ignorando l’array!

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

    Spostare la dichiarazione array al di fuori del ciclo o controllare se esiste, prima di creare un nuovo Array.

    Ma ogni volta, diversi indici, a causa di $item->id, che è unica
    MA è possibile sovrascrivere la matrice….
    Oh dio, io sono pazzo 🙂 grazie mille

    OriginaleL’autore

  2. 0

    è possibile verificare la stringa prima, quindi utilizzare indexOf, per esempio:

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

    OriginaleL’autore

Lascia un commento