2012-01-05 2 views
2

У меня есть следующая проблема. У меня есть jquery Datepicker и вы хотите отобразить некоторую дополнительную информацию при открытии datepicker. Когда я выполняется с помощью консоли Firebug, он работает, как ожидалосьjQuery Datepicker onChangeMonthYear append

$("#ui-datepicker-div").append("additional text"); 

Но когда я делаю то же самое, используя «onChangeMonthYear» -Option:

$("#datepicker").datepicker({ 
    onChangeMonthYear: function(year, month, inst) { 
     $("#ui-datepicker-div").append("additional text"); 
    } 
}); 

Он не отображает «дополнительный текст".

Любые предложения?!

Благодаря

+0

Если ответ помог вам решить вашу проблему, вы должны принять его, чтобы он мог помочь другим, а также ([FAQ] (http://stackoverflow.com/faq#howtoask)) –

ответ

0

Попробуйте

var changed = false; 

$("#datepicker").datepicker({ 
    onChangeMonthYear: function(year, month, inst) { 
     changed = true; 
    } 
}); 

if(changed) { 
     $("#ui-datepicker-div").append("additional text"); 
} 
+0

нет, это не работает – matthias

+0

см. мой обновленный код в совете PanJanek –

0

'# UI-Datepicker-DIV' создается Datepicker сценарий, и он может быть обновлен, когда datepicked хочет. Добавленный текст может быть перезаписан в любое время. Вы должны создать свой собственный заполнитель вне элемента '#datepicker', добавить текст туда и поместить его в CSS, чтобы он выглядел правильно.

2

Проблема заключается в том, что при запуске события onChangeMonthYear новая таблица календаря уже не создана. Таким образом, это добавление текста, но затем весь контент заменяется новой таблицей.

Используйте таймаут, чтобы добавить текст, это обеспечит воссоздание контента плагином перед вашим добавлением.

var appendTimeout; 

function appendText(text) { 
    clearTimeout(appendTimeout); 
    appendTimeout= setTimeout(function() { 
     $('#ui-datepicker-div').append('<div>' + text + '</div>'); 
    }, 50); 
} 

$("#datepicker").datepicker({ 
    beforeShow: function() { 
     appendText('initialAppendedText'); 
    }, 
    onChangeMonthYear: function(year, month, inst) { 
     appendText('whenMonthIsChanged'); 
    } 
}); 

Я установил тайм-аут 10 мс, но вы можете немного увеличить это значение.

Работа на пример jsfiddle

+0

Это, вероятно, будет работать, но вы не можете быть уверены, что 10 мс тайм-аута будет всегда достаточно. Браузер может немного замедляться в этот момент, выполняя некоторые другие потоки, или процессор может быть занят другими вещами. Второе: текст будет виден только до обновления даты. – PanJanek

+0

Я отметил, что таймаут может быть увеличен по этой причине. Он также может сделать то же самое с событием 'beforeShow' для первоначального добавления текста. ИМО, это «самое простое» решение, так как добавление elemtn за пределами datepicker div может превратиться в головные боли, чтобы сохранить все вместе ... –

Смежные вопросы