0
$(.dateselboxes) .change( function(){

var y; y=$("#year").val();
var m; m=$("#month").val();
var d;

//うるう年チェック

var leapYear;
if(y%4==0)
{
    if(y%100==0)
    {
        if(y%400==0) {leapYear=true;}
        else {leapYear=false;}
    }
    else {leapYear=true;}
}
else {leapYear=false;}

// 日数を計算する

var dz;
if(m==1 || m=3 || m=5 || m=7 || m=8 || m=10 || m=12) {dz=31;}
else if(m==2)
    {
        if(leapYear==true) {dz=29;}
        else {dz=28;}
    }
else {dz=30;}

// 最後のオプションを数回削除します

switch(dz)
    {
        case 28:
            for(i=0;i<3;i++)
            {$("#day option:last").remove();}
            break;
        case 29:
            for(i=0;i<2;i++)
            {$("#day option:last").remove();}
            break;
        case 30:
            $("#day option:last").remove();
            break;
        default:
            var axaxax=0;
            break;
    }

});

4

4 に答える 4

2

ほら、このコードは動作します(少なくとも Chrome では):

var opts = $('#day option').get();

$('#month, #year').change(function() {
    var y = +$('#year').val(),
        m = +$('#month').val(),
        leap = y % 400 === 0 || y % 100 !== 0 && y % 4 === 0 ? true : false,
        days = 30;

    switch ( m ) {
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:
            days = 31; break;
        case 2: 
            days = leap ? 29 : 28; break; 
    }

    $('#day').empty().append( opts.slice(0, days) );

});

ライブデモ: http://jsfiddle.net/83yUF/

于 2011-01-23T03:30:29.433 に答える
1

$(.dateselboxes)! これは何も選択しませんが、選択します$(".dateselboxes")。jQuery $ は、セレクターを表す引数として文字列を受け入れます。

あなたの質問には説明がなく、コードがたくさんあることを除けば、何が起こっているのかわかりません!

于 2011-01-23T01:51:38.050 に答える
1

月番号を確認して日数を計算している場合、== の代わりに単一の = が使用されます。と置換する:

if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12) {dz=31;}

単一の = は、新しい値を m 変数に割り当て、常に true と評価されるため、日のセレクターで常に 31 が表示されていたと思います。練習として、チェックを逆にすることでこのシナリオを回避したいと思います。つまりif(0 == x)、0 に割り当てることができないため、偶発的な単一の = は JavaScript エラーになり、間違いを回避しやすくなります。

于 2011-01-23T01:57:05.170 に答える
0

問題は、比較 (==) ではなく、変数 m への代入 (=) にあります。

if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12) {dz=31;}

補足として、スクリプトの一部を書き直すことができます。

jumpYear var - これは 2 つのステートメントを使用して、それを減らしながらも読み取り可能に保ちます。

leapYear = (y%4==0);
if (leapYear && (y%100==0) && !(y%400==0))
    leapYear=false;

最後のオプションを削除します (0-indexed)

{$("#day option:gt(" + dz + ")").remove();}
于 2011-01-23T02:10:40.357 に答える