2012-03-26 8 views
0
<script type="text/javascript" src="jquery-1.7.2.js"></script> 
<script type="text/javascript"> 

var mySite={}; 

mySite.title=$('h1'); 
mySite.makeRed= function(){ 
return mySite.title.css('color','red'); 
}; 


$(document).ready(function() { 

mySite.makeRed(); 


}); 


</script> 

Guten Tag. Warum gibt die in der Funktion aufgerufene Methode nichts zurück?Jquery und javascript scopes

+0

Können Sie Ihre Frage zu erklären? –

+0

Was meinst du mit Rückkehr? Sie haben ein Problem mit der Titelauswahl. 'mySite.title = $ ('h1');' wird das 'h1' Element zu diesem Zeitpunkt nicht auswählen, da das DOM nicht bereit ist. Es muss innerhalb eines '$ (document) .ready()' Handlers liegen, um dieses Element auswählen zu können. – Shef

Antwort

1

Ich nehme an, diese Skript-Tags sind im Kopf des Dokuments.

Wenn Sie dies tun, außerhalb der bereit Handler:

mySite.title=$('h1'); 

Das Element h1 wahrscheinlich existiert noch nicht im DOM. Dies ist der Zweck des Bereit-Handlers: Stellen Sie sicher, dass das DOM bereit ist, damit zu arbeiten.

Sie können Ihre Skript-Tag entweder am Ende des Körpers (direkt vor dem -Tag) verschieben. Dies hat das gleiche Ergebnis wie der ready-Handler, da das DOM sequentiell geparst wird.

Oder Sie könnten Sie H1-Element in der fertigen Handler greifen.

+0

+1. Das ist das Problem. :) – Shef

+0

Kann ich das sowieso initialisieren und dann beim Laden die Methode aufrufen? – DevX

+0

* ... Verschieben Sie Ihre Script-Tag am Ende des Körpers (direkt vor dem '' Tag) ... * –

0

Sie haben einige Dinge falsch geschrieben.

var mySite={}; 

mySite.title=$('<h1/>').html("Hello World"); // Set some text and create the tag tag! 

mySite.makeRed= function(){ 
return mySite.title.css('color','red'); 
}; 


$(document).ready(function() { 



    $("body").append(mySite.makeRed()); // Append it to the dom 

});​ 

http://jsfiddle.net/eZzYz/1/