jQuery DatePicker не меняет месяц / год при использовании внутри скрипта пользователя - PullRequest
0 голосов
/ 06 января 2012

Я понял, как показать выпадающие списки месяца и года, но ничего не происходит, когда я выбираю их.В основном, если вы выбираете новый месяц / год, он должен измениться на этот новый месяц / год.Я уверен, что делаю что-то не так, но вот что у меня так далеко:

$("input[name=myDate]").datepicker({
        changeMonth: true,
        changeYear: true,
        showButtonPanel: false,
        dateFormat: 'm/d/yy'
);

Предупреждение даже не срабатывает.Мы ценим любую помощьдата выбора огня.Если я не использую этот код, то при выборе дня он не входит в текстовое поле.Может быть, это влияет на выбор месяца / года?

$("input[name=myDate]").click(function () {
    setTimeout(cleanUpCrappyEventHandling, 100);
});

function cleanUpCrappyEventHandling() {
    var nodesWithBadEvents = $(
        "div.ui-datepicker td[onclick^='DP'], div.ui-datepicker a[onclick^='DP']"
    );
    nodesWithBadEvents.each(function () {
        var jThis = $(this);
        var fubarFunc = jThis.attr("onclick");

        /*--- fubarFunc will typically be like:
        DP_jQuery_1325718069430.datepicker._selectDay('#pickMe',0,2012, this);return false;
        */
        fubarFunc = fubarFunc.replace(/return\s+\w+;/i, "");

        jThis.removeAttr("onclick");
        jThis.click(function () {
            eval(fubarFunc);
            cleanUpCrappyEventHandling();
        });
    });
}

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 января 2012

Поскольку это в среде usercript / extension, вам нужно расширить cleanUpCrappyEventHandling(), чтобы учесть выпадающие списки. (Мой код для вашего другого вопроса не включал такой, потому что (1) я не использую эту функциональность и (2), стараясь не допустить усложнения примера, если нет известного спроса на него.

В любом случае замените cleanUpCrappyEventHandling() на следующее, и раскрывающиеся списки также должны работать. :

function cleanUpCrappyEventHandling () {
    //-- Fix base controls.
    var nodesWithBadEvents  = $(
        "div.ui-datepicker td[onclick^='DP'], div.ui-datepicker a[onclick^='DP']"
    );
    nodesWithBadEvents.each ( function () {
        fixNodeEvents ($(this), "click");
    } );

    //-- Fix month and year drop-downs.
    nodesWithBadEvents  = $(
        "div.ui-datepicker select[onchange^='DP']"
    );
    nodesWithBadEvents.each ( function () {
        fixNodeEvents ($(this), "change");
    } );
}

function fixNodeEvents (jNode, eventType) {
    var onName      = "on" + eventType;
    var fubarFunc   = jNode.attr (onName);

    /*--- fubarFunc will typically be like:
        DP_jQuery_1325718069430.datepicker._selectDay('#pickMe',0,2012, this);return false;
    */
    fubarFunc       = fubarFunc.replace (/return\s+\w+;/i, "");

    jNode.removeAttr (onName);
    jNode.bind (eventType, function () {
        eval (fubarFunc);
        cleanUpCrappyEventHandling ();
    } );
}



Обратите внимание, что среда usercript / extension заметно отличается от обычной JS с контекстом страницы. Вот почему другой ответ работает на обычной странице, но не в пользовательском сценарии. Пожалуйста, напишите и пометьте вопросы с учетом этого.

0 голосов
/ 06 января 2012

Смена месяца и года в календаре происходит автоматически в средстве выбора даты, для этого вам не нужен код:

$("input[name=myDate]").datepicker({
    changeMonth: true,
    changeYear: true,
    showButtonPanel: false,
    dateFormat: 'm/d/yy'
    }
);

Кроме того, я не уверен, что понимаю, что происходит в вашем onChangeMonthYear событии. Согласно текущей документации month и year не являются опциями. И даже если это так, вы устанавливаете для них значение true, а не новые значения.

Вот пример: http://jsfiddle.net/g6EXh/

...