Где моя ошибка - Калькулятор даты для selectbox в Javascript / jQuery? - PullRequest
0 голосов
/ 23 января 2011
$(.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 ]

2 голосов
/ 23 января 2011

Вот, пожалуйста, этот код работает (по крайней мере в 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/

1 голос
/ 23 января 2011

Если вы вычисляете количество дней, проверяя месяц #, у вас есть одиночный = вместо ==.Замените на:

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

Single = назначит новое значение вашей переменной m и всегда будет иметь значение true, поэтому я предполагаю, что вы всегда видели 31 в селекторе дня.Как практика, мне нравится избегать этого сценария, изменяя чек.то есть: if(0 == x), поскольку вы не можете присвоить 0 случайный одиночный =, что приведет к ошибке javascript, что позволит избежать ошибки.

1 голос
/ 23 января 2011

$(.dateselboxes)! Это ничего не выберет, однако $(".dateselboxes") будет. JQuery $ принимает строку в качестве аргумента, представляющего селектор.

Если не считать того, что ваш вопрос не имеет объяснения и загружен большим количеством кода, я понятия не имею, что происходит!

0 голосов
/ 23 января 2011

Проблема заключается в присвоении (=) переменной 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();}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...