未捕获的TypeError:无法读取null的属性“clientWidth”

时间:2013-04-08 09:59:39

标签: jquery wordpress menu var screen-size

我有一个自适应的wordpress主题。当屏幕尺寸低于740时,菜单被编码为隐藏。但是它仅在主页上正确地执行此操作。如果我转到任何其他页面菜单崩溃但它无法隐藏我收到此错误:“未捕获TypeError:无法读取属性'clientWidth'为null”

这是代码,我在主题的header.php文件中调用它:

var ww = document.body.clientWidth;
$(document).ready(function() {
    adjustMenu();


    $(".cat").click(function(e) { // cat class
        e.preventDefault();
        $(this).toggleClass("active");
        $(".sf-menu").toggle();
    });
});

function adjustMenu() {
    if (ww <= 740) { //change this to your breakpoint
        $('.sf-menu').hide();
        $(".cat").show();
        if (!$(".cat").hasClass("active")) {
            $(".sf-menu").hide();
        } else {
            $(".sf-menu").show();
        }
    } else {
        $('.sf-menu').show();
        $(".cat").hide();

    }
}


$(window).bind('resize orientationchange', function() {
    ww = document.body.clientWidth;
    adjustMenu();
});

2 个答案:

答案 0 :(得分:7)

尝试在文档末尾添加脚本。 原因是,文档宽度的开头为零,因为您的内容尚未加载,因此无需显示任何内容,因此宽度为零

答案 1 :(得分:6)

我想说从jquery使用$(window).width();。它返回浏览器视口的宽度,这相当于或者我会说传统javascript的更好的选择。

您的代码看起来像这样。检查它是否有效。

var ww = $(window).width();
$(document).ready(function() {
    adjustMenu();


    $(".cat").click(function(e) { // cat class
        e.preventDefault();
        $(this).toggleClass("active");
        $(".sf-menu").toggle();
    });
});

function adjustMenu() {
    if (ww <= 740) { //change this to your breakpoint
        $('.sf-menu').hide();
        $(".cat").show();
        if (!$(".cat").hasClass("active")) {
            $(".sf-menu").hide();
        } else {
            $(".sf-menu").show();
        }
    } else {
        $('.sf-menu').show();
        $(".cat").hide();

    }
}


$(window).bind('resize orientationchange', function() {
    ww = document.body.clientWidth;
    adjustMenu();
    });
    function adjustMenu() {
        if (ww <= 740) { //change this to your breakpoint
        $('.sf-menu').hide();
        $(".cat").show();
        if (!$(".cat").hasClass("active")) {
            $(".sf-menu").hide();
        } else {
            $(".sf-menu").show();
        }
    } else {
        $('.sf-menu').show();
        $(".cat").hide();

    }
}


$(window).bind('resize orientationchange', function() {
    ww = $(window).width();
    adjustMenu();
});