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 });
});
Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top