2010-03-25 4 views
3

J'essaie de nettoyer ma validation xhtml - J'utilise mes pages via le validateur W3C. Pour une raison déroutante, il est ne passe pas sur les champs d'entrée avec le autocomplete = « off » attribut:L'attribut de saisie semi-automatique ne passe pas XHTML 1.0 Validation transitoire, pourquoi?

<input name="kwsearch" id="sli_search_1" type="text" autocomplete="off" onfocus="if(this.defaultValue==this.value) this.value='';" 
      onblur="if(this.value=='')this.value=this.defaultValue;" class="searchbox" value="Search" /> 

J'utilise ce type de document:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

Et c'est l'erreur de validation:

ligne 410, colonne 81: il n'y a pas d'attribut "autocomplete"

... li_search_1" type = "text" autocomplete = "off" onfocus = "if (this.defaultValue == thi ...

Je pensais que c'était correct avec le W3C - mais, peut-être est-il encore en phase de "soumission"? http://www.w3.org/Submission/web-forms2/#autocomplete

pensées?

Répondre

5

La spécification de formulaires Web n'a rien à voir avec HTML 4/XHTML. Malheureusement, autocomplete ne réussira pas la validation.

Je pense que la seule façon d'atteindre valide HTML 4/XHTML avec autocomplete est désactivé en ajoutant l'attribut de la charge de la page en utilisant JavaScript. Suce, je sais - mais je pense que c'est le seul moyen.

+0

Le chargement de la page est-il suffisamment rapide pour que le navigateur n'ait pas encore rempli le formulaire? Je me souviens avoir lu un article sur l'ajout dynamique 'autocomplete', malheureusement, je ne me souviens pas de la conclusion. – Boldewyn

+0

@Boldewyn putain bonne question! Le consensus semble être surDOMLoad, au moins d'après ceci: http://avatraxiom.livejournal.com/97999.html –

1

Ce lien W3C est la substance des formulaires Web, pas XHTML noyau. Il est peut-être possible d'extraire la DTD supplémentaire pour les formulaires Web et de valider la page.

5

autocomplete est un HTML5 attribute, utilisez donc une déclaration de type de document HTML5, si vous en avez besoin.

+0

Oui, Web Forms 2.0 a été intégré dans HTML5! –

+0

Ou si vous envoyez en tant que 'application/xhtml + xml' (XHTML5) vous n'avez pas besoin d'un doctype du tout! – Hawken

0

Si vous avez besoin autocomplete (les navigateurs ne prennent en charge), puis essayez de prolonger votre doctype, comme dans ce XHTML 1.1 ci-dessous:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" [ <!ATTLIST form autocomplete (on|off) #IMPLIED> ]>

0

Je viens cogné contre ce conflit irritant entre les navigateurs et normes. J'ai fini par se déplacer par javascript en cours d'exécution sur la page, pas attendant window.onLoad ou $(document).ready(), pour ajouter l'attribut à tous les éléments avec la classe no-browser-autocomplete. Ensuite, je suis allé à travers mon application en supprimant autocomplete="off" et en ajoutant cette classe à la place.

Il est évident que cela ne fonctionne pas dans les environnements de navigateur en cours d'exécution pas javascript. La raison pour laquelle je le fais sur la page, plutôt que dans un bloc dom ready, c'est que si vous attendez dom ready, le navigateur l'a déjà autocompleted, au moins dans Firefox (dans lequel je le teste) .

C'est donc au début de l'un des fichiers javascript j'inclure dans ma mise en page de l'application:

//this needs to run BEFORE all of the loaded/ready events fire, that's why it's not in the dom.ready function 
$(".no-browser-autocomplete").attr("autocomplete", "off"); 

$(function(){ 
    //dom ready 
}); 
Questions connexes