2009-11-25 4 views
0

J'ai ajouté un peu de javascript à mes pages dernièrement, mais j'ai tout appris en mode classique. Quand je veux que ma page fasse quelque chose, je google et expérimente jusqu'à ce que j'obtienne le résultat que je veux. J'ai souvent des objets dans mes pages que je veux activer/désactiver, masquer, montrer, etc., mais - ayant manqué l'introduction rigoureuse au javascript - je ne sais pas comment ces choses sont nommées. Je clique sur les objets avec le firebug ouvert, m'attendant à voir un nom complet pour l'objet, mais n'obtiens aucune joie. Je dois juste être capable de faire quelque chose comme form.button.value = "quelque chose", et j'ai besoin de connaître le nom de cet objet.Est-ce que firebug peut me dire le nom javascript d'un objet?

Des idées?

Merci.

+0

En JavaScript, même les fonctions peuvent être anonymes. Pouvez-vous expliquer avec un code ce que vous avez du mal à faire? – Nosredna

Répondre

1

Alors que vous utilisez le code Javascript, vous avez toutes les variables locales dans le périmètre actuel, donc si vous aviez le code suivant:

var myObject = New Object(); 
myObject.Person = New Object(); 
myObject.Person.Name = "Mark"; 
myObject.Person.Gender = "Male"; 
myObject.Name = "object1"; 

... votre objet racine serait myObject, et vous vous référez aux objets descendants à travers la notation par points.

Cependant, grâce à l'implémentation du DOM dans le navigateur, vous héritez également de l'objet window via le mot-clé this. En fait, vous pouvez laisser le mot-clé this pour des situations simples, c'est-à-dire lorsque vous n'utilisez pas de fermetures. Par conséquent, vous pouvez accéder aux fonctions Javascript au niveau supérieur en utilisant simplement le nom de la fonction. Si vous voulez accéder à des éléments spécifiques, comme si cela vous semblait vouloir, vous devez apprendre le DOM, et ne pas utiliser la syntaxe que vous avez suggérée (cela ressemble à des années 90 Javascript). L'élément racine que vous devez connaître est l'objet HTMLDocument, accessible via la propriété document. Vous pouvez découvrir des éléments avec des attributs Id (pas Name) spécifiques en utilisant la méthode getElementById de l'élément de document. Bien sûr, cela aide si vous avez donné à votre élément un identifiant unique dès le départ. Vous pouvez également utiliser récursivement la collection childNodes pour parcourir manuellement les éléments jusqu'à ce que vous trouviez ce que vous voulez. Sinon, si vous ne pouvez pas fournir un ID, vous pouvez également utiliser la méthode getElementsByTagName, qui est attachée à chaque élément du DOM.

Exemple:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 
<HTML> 
<HEAD> 
    <TITLE></TITLE> 
    <META NAME="Generator" CONTENT="TextPad 4.6"> 
    <META NAME="Author" CONTENT="?"> 
    <META NAME="Keywords" CONTENT="?"> 
    <META NAME="Description" CONTENT="?"> 
    <SCRIPT LANGUAGE="Javascript"> 
     <!-- 

     function DoSummat() 
     { 
      var divInside = document.getElementById("Inside"); 
      divInside.textContent = "This text will appear inside."; 
     } 

     //--> 
    </SCRIPT> 
</HEAD> 

<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#800000" ALINK="#FF00FF" BACKGROUND="?"> 
<FORM> 
    <INPUT TYPE="BUTTON" onclick="DoSummat();" NAME="MyButton" VALUE="Press Me"> 
</FORM> 
<DIV ID="Outside"> 
    <DIV ID="Middle"> 
     <DIV ID="Inside"></DIV> 
    </DIV> 
</DIV> 
</BODY> 
</HTML> 
0

Votre question est extrêmement vague, donc je ne peux pas vous donner la réponse dont vous avez besoin.

Object s ne peuvent pas être "activés"/"désactivés" et ils n'ont pas de "noms" (ils peuvent avoir une propriété name, si c'est ce que vous voulez dire).

Par exemple, avec:

var foo = {}; 

foo est une variable qui arrive à avoir une valeur qui est un objet. L'objet n'est pas la variable (objet ayant un "nom"). Étant donné:

bar = foo; foo = null; 

foo est maintenant null et l'objet qui est maintenant foo tenu stocké sous forme bar.

0

Vous ne serez pas en mesure de le faire. Le nom de la variable n'est pas lié à la variable et ils ne sont pas transmis entre les fonctions. Le mieux que vous pouvez faire est d'écrire une fonction pour une chaîne de caractères et le résoudre retour à une variable:

function printVar(name) { 
    console.log(name + ": " + window[name]); 
} 

Bien sûr, il y a beaucoup de choses mal à cela. Je recommande simplement faire deux appels d'exploitation forestière:

console.log("foo"); 
console.log(foo); 

ou, en utilisant la syntaxe de style printf:

console.log("foo: %o", foo); 
1

Les éléments sont généralement identifiés en utilisant l'attribut id. Exemple:

<input type="submit" id="saveButton" value="Save" /> 

Vous pouvez utiliser la méthode getElementById pour obtenir une référence à un élément:

var b = document.getElementById('saveButton'); 
b.value = 'Saving...'; 
1

Eh bien, puisque vous avez donné l'exemple form.button.value="something", je devine que vous voulez contrôler les objets HTML. Vous pouvez leur assigner un identifiant, par exemple: < form id = "my_form" ... puis obtenir des éléments par ID à partir de JS, comme la fonction est appelée, getElementById().

document.getElementById('my_form').button.value = 'something'; 
Questions connexes