Domanda

Ho una raccolta di fisarmonica che contengono vari controlli di testo e controlli di testo, ciascuno con i propri validatori.

Se si verificano alcune convalide del lato server sulla forma invio, c'è qualcosa che può espandere automaticamente un riquadro precedentemente ridotto a minimizzato che contiene il messaggio validatore non valido?Altrimenti, sembrerà all'utente che la forma non è sottostabile senza ragione.

Un altro scenario: diciamo che ho più riquadri con lato client convalidatori legati agli ingressi.Se un riquadro è ridotto al minimo (e quindi non è possibile visualizzare l'interruzione errormessaggio del validatore), esiste un modo per espandere il riquadro appropriato quando si verifica la convalida della pagina Ajax su invio?

So che c'è un modo di forza bruta a questo approccio, dove tengo la pista di ogni validatore e il loro associato fisarmonicapane, ma speravo in una soluzione migliore che può gestire la mia situazione per un gran numero di input / validatori e riquadri.

È stato utile?

Soluzione

Che ne dici di qualcosa di simile (usando jquery ma sono sicuro che può essere convertito in javascript normale) ...

$(document).ready(function(){
    if (isPostback()){
        $.each(Page_Validators, function(index, validator) {
            if (!validator.isvalid) {
            // do something here to locate the accordion based on the validator
            // $(this) is the currently invalid validator element as a jquery object/wrapped set
            // so for example...
                $(this).parent().slideDown();
            // This assumes that the immediate parent of of the validator is the accordion which is unlikely but if you post your emitted html I can write the appropriate selector for you.  
            }
        });
    }
});
.

Perché non vuoi che si spara al carico iniziale puoi usare una tecnica come questa Come rilevare / tracciare il postback in JavaScript? e verificare se ti trovi in un postback dopo il documento.Ready - ho assunto che hai usato il consiglio nel link e la tua funzione per il rilevamento postback è chiamato ispostback().

Altri suggerimenti

C'è un progetto costruito per questo problema prova a dargli un'occhiata .... Puoi anche scaricare la fonte per l'analisi maggiori dettagli o utilizzare lo stesso codice-base se vuoi .... http://www.codeproject.com/articles/43397/valaling-Accordion-and-radanelbar-using-ajax-an

Rich mi ha battuto, ma ecco la versione Vanilla JS (IE9 +):

Page_Validators
    .filter(function(v) { return !v.isvalid; })
    .forEach(function (v) { console.log(v.parentNode); });
.

Ricordarsi di posizionare il codice sotto il -Tag.Ho avuto problemi con l'utilizzo di JQuerys Document.ready e window.Hoad, poiché potrebbe eseguire il codice prima di caricare tutto il necessario JavaScript da ASP.NET.

Aggiornamento: una versione compatibile più browser

for(var i = 0; i < Page_Validators.length; i++) {
    var validator = Page_Validators[i];
    if (!validator.isvalid) {
        console.log(validator.parentNode);
    }
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top