2017-03-10 10 views
0

私はこれを試してみました:無効にspecifc日付jqueryの日付ピッカー

var disabledDays = ["2017-03-16","2017-03-20","2017-03-29","1717-0404-0303"]; 

jQuery(document).ready(function() { 
    var unavailableDates = ["2017-03-16","2017-03-13","2017-03-21"]; 

    function unavailable(date) { 
    // dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear(); 
    dmy = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(); 
    if ($.inArray(dmy, unavailableDates) < 0) { 
     return [true,"","Book Now"]; 
    } else { 
     return [false,"","Booked Out"]; 
    } 
    } 

    jQuery('#checkin').datepicker({ 
    minDate: 0, 
    constrainInput: true,   
    dateFormat: "yy-mm-dd", 
    beforeShowDay: unavailable 
    }).on('change', function() { 
    jQuery(this).valid(); 
    }); 
}); 

それが言い続ける理由を、私はちょうど把握することはできません。

は、プロパティを読み取ることができません 'InArrayバリ'

未定義

私はこのような100のコードのように、神と同じエラーを試みました。これらのコードはすべてデモで正常に動作しています。

お願いします。

+0

はjQueryのに '$'変数ポイントしていますか?あなたのコードのどこにいても、あなたは '$ .noConflict()'をどこかで呼び出したことを意味する 'jQuery'を使用します。 –

+0

すごい!! ..私のダム..." 03 "のような月を得る方法を教えてください"3"? –

+0

確かに、私はあなたのための両方の問題をカバーする答えを追加しました –

答えて

0

このエラーは、$変数がjQueryを指していないことを意味します。これは、コードの他のすべての点でjQueryを使用しているという事実によってもバックアップされます。これを修正するには、コード全体で$.inArray()jQuery.inArray()に変更するか、document.readyハンドラに渡されたjQueryのインスタンスをエイリアスすることができます。

そこからは配列に月と日の値の先頭に0が含まれていますが、dmy変数には日付の書式に問題があります。これを修正するには、日付のtoISOString()メソッドを使用して時刻を削除することができます。これを試してみてください:

jQuery(function($) { // < note the $ alias here 
    var unavailableDates = ["2017-03-16", "2017-03-13", "2017-03-21"]; 

    function unavailable(date) { 
     var dmy = date.toISOString().split('T')[0]; 
     if ($.inArray(dmy, unavailableDates) < 0) { 
      return [true, "", "Book Now"]; 
     } else { 
      return [false, "", "Booked Out"]; 
     } 
    } 

    $('#checkin').datepicker({ 
     minDate: 0, 
     constrainInput: true, 
     dateFormat: "yy-mm-dd", 
     beforeShowDay: unavailable 
    }).on('change', function() { 
     $(this).valid(); 
    }); 
}); 

Working example

+0

しかし、それは次の日付を無効にしています.. 16 ..の代わりにその無効17 –

+0

それはタイムゾーンのオフセットに起因する可能性が高いです。文字列の先頭に '' 00 "'を追加し、次のように '.slice(-2)'を呼び出すことで、値に先行するゼロを強制することができます:https://jsfiddle.net/sLns93zp/1/ –

関連する問題