Question

Je m'amuse à écrire un plugin jQuery qui utilise un attribut pour définir le comportement de validation de formulaire (oui, je sais qu'il existe déjà un plugin de validation; c'est autant un exercice d'apprentissage que quelque chose que j'utiliserai). . Idéalement, j'aimerais avoir quelque chose comme ça:

Exemple 1 - entrée:

<input id="name" type="text" v:onvalidate="return this.value.length > 0;" />

Exemple 2 - wrapper:

<div v:onvalidate="return $(this).find('[value]').length > 0;">
   <input id="field1" type="text" />
   <input id="field2" type="text" />
   <input id="field3" type="text" />
</div>

Exemple 3 - prédéfini:

<input id="name" type="text" v:validation="not empty" />

Le but ici est de permettre à mon code jQuery de déterminer quels éléments doivent être validés (cela est déjà fait) tout en conservant le balisage en XHTML valide, ce qui me pose problème. Je suis à peu près sûr que cela nécessitera une combinaison de la DTD et du schéma XML, mais je ne sais pas trop comment l'exécuter exactement.

D'après cet article , j'ai créé la DTD suivante:

<!ENTITY % XHTML1-formvalidation1
    PUBLIC  "-//W3C//DTD XHTML 1.1 +FormValidation 1.0//EN"
            "http://new.dandoes.net/DTD/FormValidation1.dtd" >
%XHTML1-formvalidation1;

<!ENTITY % Inlspecial.extra 
  "%div.qname; " >

<!ENTITY % xhmtl-model.mod
    SYSTEM "formvalidation-model-1.mod" >  
<!ENTITY % xhtml11.dtd
    PUBLIC  "-//W3C//DTD XHTML 1.1//EN"
            "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
%xhtml11.dtd;

Et voici "formvalidation-model-1":

<!ATTLIST %div.qname;
    %onvalidation   CDATA   #IMPLIED
    %XHTML1-formvalidation1.xmlns.extra.attrib;
>

Je n'ai jamais fait de DTD auparavant, alors je ne suis même pas vraiment sûr de ce que je fais. Lorsque j'exécute le validateur W3 XHTML sur ma page, je reçois plus de 80 erreurs car des définitions en double de tous les éléments XHTML sont dupliquées. Suis-je au moins sur la bonne voie? Des suggestions?

MODIFIER: J'ai supprimé cette section de ma DTD personnalisée, car il s'est avéré qu'il s'agissait en réalité d'une auto-référence et le code dont je tire le modèle était en réalité destiné à la combinaison de deux DTD en une, sans ajout d'éléments spécifiques à une:

<!ENTITY % XHTML1-formvalidation1
    PUBLIC  "-//W3C//DTD XHTML 1.1 +FormValidation 1.0//EN"
            "http://new.dandoes.net/DTD/FormValidation1.dtd" >
%XHTML1-formvalidation1;

J'ai également supprimé ceci, car il ne valait pas et ne semblait rien faire:

<!ENTITY % Inlspecial.extra 
  "%div.qname; " >

De plus, j’ai décidé que, comme je n’ajoute que quelques éléments supplémentaires, le modèle de fichiers séparé recommandé par W3 ne me semble pas vraiment utile. J’ai donc tout mis dans le fichier dtd, dont le contenu est maintenant ceci:

<!ATTLIST div onvalidate CDATA  #IMPLIED>
<!ENTITY % xhtml11.dtd
    PUBLIC  "-//W3C//DTD XHTML 1.1//EN"
            "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
%xhtml11.dtd;

Je ne reçois donc aucune erreur de validation liée à la DTD, mais l'attribut onvalidate n'est toujours pas valide.

Mise à jour: j'ai abandonné la DTD et ajouté un schéma: http://schema.dandoes.net/FormValidation/1.0.xsd

L'utilisation de v: onvalidate semble valider dans Visual Studio, mais le service W3C ne l'aime toujours pas.

Voici une page où je l'utilise afin que vous puissiez regarder la source:

http://new.dandoes.net/auth

Et voici le lien vers le résultat de la validation W3C:

http://validator.w3.org/check?uri=http://new.dandoes.net/auth&charset= (détecter + automatiquement) & doctype = Inline & amp; group = 0

Est-ce que c'est à peu près aussi proche que possible, ou est-ce que je fais toujours quelque chose de mal?

Était-ce utile?

La solution

Si vous voulez que le résultat soit valide en XHTML, je pense que vous devez utiliser XML. espaces de noms plutôt qu’une DTD personnalisée. Non seulement la DTD définit la langue (et par conséquent, une DTD personnalisée n'est pas "vraiment" XHTML), mais elle jettera tous les navigateurs qui la liront dans mode quirks , même s'ils ne s'étouffent pas dans le fichier.

L’utilisation d’un espace de noms, par contre, produira un XHTML parfaitement valide (même si tous les validateurs ne prennent pas en compte l’espace de nom et risquent de ne pas le valider correctement) et permettra aux navigateurs de fonctionner en mode (quasi) standard.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="http://example.com/ns/validation" xml:lang="en">
    <head><title>Validation Example</title></head>

    <body>
        <input id="name1" type="text" v:onvalidate="return this.value.length &gt; 0;"/>
        <input id="name2" type="text" v:validation="not empty"/>
    </body>
</html>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top