Javascript focus() et sélectionnez() caprice
Je travaille sur un formulaire et obtenir la valeur null ou n'est pas un objet erreurs dans ie.
<form action="#" method="post" name="adv_search">
<input class="inputbox" type="text" name="keyword1" value="none" id="keyword1"/>
</form>
<script>
document.adv_search.keyword1.focus();
document.adv_search.keyword1.select();
</script>
//alors que si j'utilise
<script>
var key1 = document.getElementById('keyword1');
key1.focus();
key1.select();
</script>
//tout va bien
j'aimerais comprendre pourquoi.
je voudrais qu'il fonctionne sans avoir l'id de la balise pour le champ de saisie
merci d'avance
ne devrais pas le document.nomformulaire.fieldname.focus();
et document.nomformulaire.fieldname.sélectionnez();
travail?
OriginalL'auteur chris | 2009-04-06
Vous devez vous connecter pour publier un commentaire.
Votre exemple particulier qui fonctionne pour moi, mais si j'ajoute un autre champ avec le même nom:
Puis
document.adv_search.keyword1.focus()
échouera avec l'erreur que vous spécifiez.La raison en est que:
est un raccourci pour cette syntaxe (qui remonte à DOM Niveau 0 et Netscape 2 jours!):
(D'ailleurs, il est préférable d'utiliser cette syntaxe complète, au lieu de s'appuyer sur le comportement du "document" et la "forme" d'objets indexés sur les noms: si une nouvelle méthode est ajouté à HTMLDocument ou HTMLFormElement, qui pourraient entrer en conflit avec le nom de la commande que vous utilisez. C'est moins un problème lorsque vous utilisez le document.de forme ou.les éléments des collections. Aussi, c'est à dire, à tort, vidages de tous les noms et numéros dans "document", donc si vous avez un élément avec
id="adv_search"
en plus de la forme que, comme un nom,document.adv_search
sera de retour le mauvais.)De toute façon, le DOM Niveau 0 de script méthodes se comporter légèrement curieusement lorsque vous accéder à un élément par son nom comme cela. Si il y a un seul élément correspondant, vous aurez qu'un seul objet. Si, d'autre part, il y a plus d'un, vous obtiendrez une liste d'objets. Vous ne pouvez pas appeler
focus()
ouselect()
sur un tableau sous forme de liste, c'est pourquoi l'erreur s'affiche; vous devez faire quelque chose comme keyword1[0].focus() lorsque la liste a été retourné.De sorte que vous devez décider si vous allez utiliser de la vieille école DOM Niveau 0 de méthodes pour accéder à votre formulaire de contrôle — dans ce cas, vous allez avoir à faire face à renifler pour un seul ou plusieurs de contrôle ou de se déplacer à l'ID de la base de méthodes introduites par "DOM Niveau 1":
Basée sur l'ID méthodes sont généralement un peu plus de taper (dans le script et d'ajouter " la carte d'identité pour tous les éléments que vous souhaitez accéder de cette façon, si ils n'ont pas déjà), mais ils sont simples et sans ambiguïté. (D'ailleurs vous pouvez ensuite déposer le
name
sur le <form> lui-même).vous avez eu raison. le code, je travaille avec n'ont de 2 cases avec le même nom.
OriginalL'auteur bobince
L'ID de l'approche est vraiment meilleur, mais si vous voulez aller par nom, utilisez getElementsByName.
Dans ce cas, il pourrait ressembler à ceci:
ah l' [0] fixé grâce
OriginalL'auteur Michael Haren