jQuery onLoad问题

时间:2013-08-25 17:16:17

标签: jquery domdocument onload

你能解释一下为什么 here 这个代码段有效且 here 没有?

$('#about, #subscribe, #contact').hide();

$('.home').click(function() {
    var id = $(this).html().toLowerCase();
    var $content = $('#' + id + ':not(:visible)');
    if ($('.current').length === 0) {
        showContent($content)
    }
    else {
        $('.current').fadeOut(600, function() {
            showContent($content)
        });
    }
});

function showContent(content) {
    content.fadeIn(600);
    $('.current').removeClass('current');
    content.addClass('current');
}

我把完全相同的代码放在小提琴中..

2 个答案:

答案 0 :(得分:1)

将您的代码包装在:

$(document).ready(function(){
    // your code here
});

这意味着只有在初始化DOM后才能运行代码。现在,您的代码将在DOM准备好被操作之前运行,这将导致您遇到的问题。

在小提琴中,代码会自动在加载时运行(请参阅您链接到的小提琴中的onLoad框)。

在此处详细阅读:http://api.jquery.com/ready/

答案 1 :(得分:0)

这是因为你没有像你在小提琴中指定的那样将代码包装在$(window).load({});中。

  $(window).load(function() {
      $('#about, #subscribe, #contact').hide();

      $('.home').click(function() {
        var id = $(this).html().toLowerCase();
        var $content = $('#' + id + ':not(:visible)');
        if ($('.current').length === 0) {
            showContent($content)
        }
        else {
            $('.current').fadeOut(600, function() {
                showContent($content)
            });
        }
    });

    function showContent(content) {
        content.fadeIn(600);
        $('.current').removeClass('current');
        content.addClass('current');
    } 
  });