JQuery UI DateTimePicker e ASP.Net CompareValidator para DatatyPecheck
-
05-07-2019 - |
Pergunta
Estou usando uma caixa de texto ASP.NET com o JQuery UI DatePicker. A caixa de texto permite edições para que o usuário possa inserir uma data manual ou limpar uma entrada existente. Adicionei um comparevalidador para executar uma verificação de tipo de dados na caixa de texto e isso causa um erro depois de selecionar uma data com o DatePicker. O erro ocorre na validação do lado do cliente ASP.NET:
Microsoft JScript runtime error: 'length' is null or not an object
O erro ocorre no validatoronChange. Como posso consertar isso? É possível usar o DatePicker com os controles do validador ASP.NET?
Minha marcação é:
<asp:Label runat="server" AssociatedControlID="uxInstallDate">Install Date</asp:Label>
<asp:TextBox ID="uxInstallDate" runat="server" Columns="10" />
<asp:CompareValidator runat="server" ControlToValidate="uxInstallDate" Operator="DataTypeCheck" Type="Date" Text="*" ErrorMessage="Install Date must be a date." Display="Dynamic" />
Observe que o atributo de identificação ausente no CompareValidator é intencional e adicionar não faz diferença. Minha inicialização de jQuery é:
$(document).ready(function() {
$("#<%= uxInstallDate.ClientID %>").datepicker({ changeMonth: true });
});
Solução
Eu acho que encontrei uma solução. Este é um bug que ocorre no IE, não no Firefox (não testei nenhum outro navegador). A solução foi substituir o método OnSelect na inicialização:
$("#<%= uxInstallDate.ClientID %>").datepicker({ changeMonth: true, onSelect: function() { } });
Encontrei uma descrição do problema e da solução aqui e uma solução alternativa aqui.
Outras dicas
Base na solução de Jamie e o alternativo Solução Ele fornece: Aqui está minha solução alternativa para ignorar esse bug estranho que ocorre apenas com o IE.
Presumo que uma data selecionada pelo DatePicker Control seja uma data válida, então oculço a mensagem ou o erro de imagem do CompareValidator, se estiver visível.
$(".myControl").datepicker({
onSelect: function() {
if ($.browser.msie) {
if ($(this).next("span").css("display") != "none") {
$(this).next("span").css("display", "none");
}
}
else {
$(this).trigger('change');
}
}
});
Espero que ajude