2009-07-07 7 views
4

Ich habe den folgenden Code zum Erstellen von Registerkarten. Es funktioniert am Ende des HTML-Body-Abschnitts, aber nicht, wenn ich es am Anfang platziere - bevor alle divs definiert sind. Warum könnte das sein?Warum funktioniert ein Jquery-Code nur, wenn er am Ende meines html-body-Abschnitts steht?

+0

„... vor allem der divs definiert werden“ sollten Sie einen Anhaltspunkt geben - wie können sie Ihr Code möglicherweise manipulieren, wenn sie noch nicht definiert haben? – NickFitz

Antwort

5

Sie müssen es mit einem Dokument bereit Block wickeln. Dies verhindert, dass der Code ausgelöst wird, bis die Seite vollständig geladen ist.

<script type="text/javascript"> 
    $(function() { 
     // do something on document ready 
     $("ul.tabs li.label").hide(); 
     $("#tab-set > div").hide(); 
     $("#tab-set > div").eq(0).show(); 
     $("ul.tabs a").click(
     function() { 
      $("ul.tabs a.selected").removeClass('selected'); 
      $("#tab-set > div").hide(); 
      $(""+$(this).attr("href")).show(); 
      $(this).addClass('selected'); 
      return false; 
     } 
    ); 
     $("#toggle-label").click(function() { 
     $(".tabs li.label").toggle(); 
     return false; 
     }); 
    }); 
</script> 
+1

Dies ist im Grunde das erste, was Sie lernen, wenn Sie jQuery lernen. – Travis

10

Es ist höchstwahrscheinlich, weil das DOM noch nicht fertig ist, und deshalb existieren sie nicht.

Daher müssen Sie Folgendes tun:

$(function() { 
    // Any code in here will only be executed when the DOM is ready. 
}); 
+0

oder lassen Sie Ihren Code am Ende des Dokuments (oder beides). –

+0

@coward: das ist nicht zuverlässig. Es funktioniert nicht die ganze Zeit und in jedem Browser –

0
jQuery(function($) { 
    // put your code in here and it will be executed 
    // when the document has fully loaded. 
}); 
Verwandte Themen