JQuery Datepicker OnSelect и проблема TextChanged

function hiliter(word, element) {
    var rgxp = new RegExp(word, 'g');
    var repl = '<span class="myClass">' + word + '</span>';
    element.innerHTML = element.innerHTML.replace(rgxp, repl);
}
hiliter('dolor');
6
задан jitter 11 December 2009 в 09:12
поделиться

2 ответа

После короткой проверки источников jQuery UI Datepicker решение состоит в том, чтобы просто запустить событие изменения самостоятельно

...
onSelect: function(dateText, inst) {
    var theDate = new Date(Date.parse($(this).datepicker('getDate')));
    $("#<%=txtEndDate.ClientID %>").datepicker('option', 'minDate', theDate);
    if (inst.input)
        inst.input.trigger('change');
}
...

Причиной этого являются следующие строки в исходном коде jQuery UI Datepicker

if (onSelect)
    // trigger custom callback
    onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
else if (inst.input)
    // fire the change event
    inst.input.trigger('change');

Как видите, jQuery UI Datepicker запускает событие change по умолчанию, если экземпляр datepicker является полем input , но не запускает его, если вы указали пользовательское onSelect обработчик (как и вы).

Вы можете возразить, что на самом деле это правильное поведение, поскольку оно гарантирует вам максимальную настраиваемость. Вы можете решить, хотите ли вы, чтобы событие change происходило или нет.

Но я согласен, что такое поведение, возможно, следует задокументировать.

6
ответ дан 16 December 2019 в 21:41
поделиться

Вы можете просто добавить

$ ( '<% = txtStartDate.ClientID%>'). trigger ('change');

до конца onSelect функции. Рассмотрим следующий рабочий пример: http://jsbin.com/oqunu/ или отредактируйте версию http://jsbin.com/oqunu/edit

Или переместите логику в функции, запускаемые TextChanged, и избавьтесь от onSelect. Как здесь: http://jsbin.com/iyajo ; редактировать версию http://jsbin.com/iyajo/edit

2
ответ дан 16 December 2019 в 21:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: