Obtenir datalist options dans IE9 avec JavaScript
Ce code fonctionne dans tous les principaux navigateurs, sauf Internet Explorer 9. Je ne comprends pas ce que je fais mal, c'est probablement quelque chose de simple que je suis absent.
Copiez ce code (ou utilisez cette jsFiddle) pour voir le problème dans IE9:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>Datalist fetching in IE9</title>
<script type="text/javascript">
//document.createElement('datalist');//this seems to fix it for IE6, but not for IE9
window.onload = function() {
alert(document.getElementById('languages').getElementsByTagName('option').length);//should alert 42
};
</script>
</head>
<body>
<form method="post">
<input name="language" type="text" value="English" list="languages" />
<datalist id="languages">
<option value="Arabic" />
<option value="Bengali" />
<option value="Bulgarian" />
<option value="Catalan" />
<option value="Chinese" />
<option value="Croatian" />
<option value="Czech" />
<option value="Danish" />
<option value="Dutch" />
<option value="English" />
<option value="Filipino" />
<option value="Finnish" />
<option value="French" />
<option value="German" />
<option value="Greek" />
<option value="Gujarati" />
<option value="Hebrew" />
<option value="Hindi" />
<option value="Hungarian" />
<option value="Indonesian" />
<option value="Italian" />
<option value="Japanese" />
<option value="Kannada" />
<option value="Korean" />
<option value="Latvian" />
<option value="Lithuanian" />
<option value="Malay" />
<option value="Malayalam" />
<option value="Marathi" />
<option value="Norwegian" />
<option value="Oriya" />
<option value="Persian" />
<option value="Polish" />
<option value="Portuguese" />
<option value="Romanian" />
<option value="Russian" />
<option value="Serbian" />
<option value="Slovak" />
<option value="Slovenian" />
<option value="Spanish" />
<option value="Swedish" />
<option value="Tamil" />
</datalist>
</form>
</body>
</html>
Je voudrais qu'il soit comme la croix-navigateur que possible à la fin.
Vous devez vous connecter pour publier un commentaire.
IE 9 ignore
option
des éléments qui ne sont pas les enfants directs d'unselect
élément (ou d'unoptgroup
dans un délai d'un). Une solution simple consiste à envelopper votreoption
éléments cachésselect
élément en utilisant les commentaires conditionnels:Voici un jsFiddle démo de cette approche.
2017 mise à Jour: Il est intéressant de noter qu'à partir de juillet 2017 Safari sur iOS & Mac n'a pas encore ajout du support pour
<datalist>
éléments. OP demandé de trouver une solution qui fonctionne va tous les principaux navigateurs, donc ce n'est probablement pas la meilleure solution à cet effet.Plus d'infos ici: http://caniuse.com/#search=datalist
Pour une raison quelconque, la solution proposée ne fonctionne pas pour moi. Au lieu de cela j'ai utilisé jQuery UI autocomplete méthode et Modernizr pour vérifier si le navigateur prend en charge.
J'ai fini à l'aide de ce code javascript:
Pour le code HTML suivant:
Utilisé les méthodes suivantes de Microsoft poste de référence: http://msdn.microsoft.com/en-us/magazine/dn133614.aspx
Vous avez besoin d'ajouter un élément meta définir le mode de compatibilité du contenu de IE8, et aussi, permettre le mannequin-élément de création en ligne - c'est nécessaire.
Donc, votre
<head>
devrait maintenant ressembler à ceci: