2011-01-23 5 views
0
$(.dateselboxes) .change(function(){ 

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

//チェックうるう年私の間違いはどこですか?Javascript/jQueryのselectboxの日付計算機ですか?

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

});

+0

正確に何が動作していないのかを指定できますか? – RichardTheKiwi

+0

エラーがスローされますか? –

答えて

1

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

あなたの質問には説明やコードがありませんが、私は何が起こっているのか分かりません。

1

月を確認して日数を計算する場合は、==の代わりにsingle =を使用します。

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

単一=があなたのm個の変数に新しい値を代入し、常に真であると評価されますので、私は常にあなたの一日のセレクタに31を見ていたと仮定します。 はと交換してください。練習として、私は小切手を逆にしてこのシナリオを避けるのが好きです。つまり、if(0 == x)を0に割り当てることはできません。なぜなら、間違ってsingle =を指定すると、javascriptエラーが発生し、間違いを避けやすくなります。

+0

助けてくれてありがとう、私は間違いを訂正しましたが、まだこの仕事をすることはできません – xzappa

+0

jQueryセレクタの問題も修正しましたか?まだ問題が解決していない場合は、表示されている問題とHTML DOMがどのようなものかを知ることで、より明確な答えが得られる可能性があります。 – nybbler

+0

はい、ついに私はこれを働かせました。 – xzappa

0

問題は、あなたのスクリプトの一部を書き換えることができ、サイドノートとして

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

変数mに(=)を割り当てる代わりに、(==)を比較しています。

leapYear var - これを減らすために2つのステートメントを使用しますが、それでも読みやすい状態にします。

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

は、あなたが行くここ

{$("#day option:gt(" + dz + ")").remove();} 
2

(0-インデックス付き)最後のオプションを削除するには、このコードは(少なくとも、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/

関連する問題