我的错误在哪里 - Javascript/jQuery 中选择框的日期计算器?

发布于 2024-10-13 19:20:08 字数 1006 浏览 2 评论 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;
    }

});

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

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

// check leap year

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

// calculate the number of days

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

// remove last option a couple of times

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

});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

很酷又爱笑 2024-10-20 19:20:08

在这里,这段代码可以工作(至少在 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/

Here you go, this code works (in Chrome, at least):

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

});

Live demo: http://jsfiddle.net/83yUF/

雨巷深深 2024-10-20 19:20:08

$(.dateselboxes)!这不会选择任何内容,但 $(".dateselboxes") 会选择。 jQuery $ 接受一个字符串作为代表选择器的参数。

除此之外,你的问题没有解释和大量代码,我不知道发生了什么!

$(.dateselboxes)! This will not select anything, however $(".dateselboxes") will. The jQuery $ accepts a string as its argument representing the selector.

Asside from that your question has no explanation and loads of code, I haver no idea what is going on!

荒芜了季节 2024-10-20 19:20:08

在通过检查月份 # 来计算天数的情况下,您使用的是单个 = 而不是 ==。
替换为:

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 错误,从而更容易避免错误。

Where you are calculating the number of days by checking the month #, you have single = instead of ==.
Replace with:

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

The single = will assign the new value to your m variable and always evaluate to be true, so I assume you were seeing 31 in your day selector always. As a practice, I like to avoid this scenario by reversing the check. ie: if(0 == x) since you can't assign to 0 an accidental single = will result in a javascript error, making it easier to avoid the mistake.

可爱咩 2024-10-20 19:20:08

问题在于将 (=) 分配给变量 m 而不是比较 (==)

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

作为旁注,您可以重写脚本的某些部分。

LeapYear var - 这使用 2 个语句来减少它,但仍然保持可读。

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

删除最后一个选项(0索引)

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

The problem is with assigning (=) to variable m instead of comparing (==)

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

As a side note, you could rewrite some parts of your script.

leapYear var - this uses 2 statements to reduce it yet still keep it readable.

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

to remove the last options (0-indexed)

{$("#day option:gt(" + dz + ")").remove();}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文