了解 Jquery 函数 - $(document).ready(callback);
Understanding Jquery function - $(document).ready(callback);
您好,我正在尝试 运行 关于 window 调整大小和准备文档的功能。由于调整大小是由移动滚动触发的,因此有必要检查高度是否已更改。此代码适用于调整大小但不适用于加载。有谁能解释为什么函数没有在文档准备好时执行?提前致谢。
//CLOSE EXPANDED ELEMENTS FOR MOBILE
var $window = $(window);
var width = $(window).width();
var callback = function () {
if($(window).width() != width){
if ($window.width() < 756) {
$(".content_lower.collapse").removeClass('in');
}
else {
$(".content_lower.collapse").addClass('in');
}
}
};
$(document).ready(callback);
$(window).resize(callback);
console.log(callback.toString());
实际上在文档就绪时文档刚刚加载并且 $(window).width()
等于 width
变量。
所以函数callback
会在width = $(window).width()
时被调用,所以不会进入if条件,函数内部什么也不会发生。
如果您尝试将 somtheing 记录到控制台或在您的函数开头警告消息,您将看到它已执行:
var callback = function() {
console.log("Callback entered !!!");
if ($(window).width() != width) {
if ($window.width() < 756) {
$(".content_lower.collapse").removeClass('in');
} else {
$(".content_lower.collapse").addClass('in');
}
}
};
编辑:
如果您仍然想在文档加载中执行它,您可以添加一个初始化为 false
的布尔标志并将其设置为 true
如果 window 调整大小然后使用它:
var $window = $(window);
var width = $(window).width();
var called = false;
var callback = function() {
console.log("callback entered !!!");
if ($(window).width() != width || !called) {
if ($window.width() < 756) {
$(".content_lower.collapse").removeClass('in');
} else {
$(".content_lower.collapse").addClass('in');
}
}
called = true;
};
$(document).ready(callback);
$(window).resize(callback);
console.log(callback.toString());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="content_lower.collapse">the div</div>
编辑 2:
更好的方法是使用布尔标志作为 callback
函数的参数,并在文档加载时用 false
调用它,在 window 上用 true
调用它调整大小:
var $window = $(window);
var width = $(window).width();
var callback = function(resized) {
if ($(window).width() != width || !resized) {
if ($window.width() < 756) {
$(".content_lower.collapse").removeClass('in');
} else {
$(".content_lower.collapse").addClass('in');
}
}
};
$(document).ready(callback(false));
$(window).resize(callback(true));
加载文档后,width
变量将设置为您的 window 宽度(假设为 500 像素)。然后它检查当前 window 宽度(即 500px)是否等于 width
var (500 !== 500
)。这个returnsfalse
,所以你的代码不会被执行。您可以这样做:
var callback = function() {
if ($(window).width() < 756) {
$('body').text($(window).width() + " - if");
} else {
$('body').text($(window).width() + " - else");
}
};
$(document).ready(callback);
$(window).resize(callback);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
这达到了预期的效果。坦克的帮助家伙。
var $window = $(window);
var width = $(window).width();
var callback = function () {
if ($window.width() < 756) {
$(".content_lower.collapse").removeClass('in');
}
else {
$(".content_lower.collapse").addClass('in');
}
};
$(document).ready(callback);
$( window ).resize(function() {
if($(window).width() != width){
callback();
}
});
您好,我正在尝试 运行 关于 window 调整大小和准备文档的功能。由于调整大小是由移动滚动触发的,因此有必要检查高度是否已更改。此代码适用于调整大小但不适用于加载。有谁能解释为什么函数没有在文档准备好时执行?提前致谢。
//CLOSE EXPANDED ELEMENTS FOR MOBILE
var $window = $(window);
var width = $(window).width();
var callback = function () {
if($(window).width() != width){
if ($window.width() < 756) {
$(".content_lower.collapse").removeClass('in');
}
else {
$(".content_lower.collapse").addClass('in');
}
}
};
$(document).ready(callback);
$(window).resize(callback);
console.log(callback.toString());
实际上在文档就绪时文档刚刚加载并且 $(window).width()
等于 width
变量。
所以函数callback
会在width = $(window).width()
时被调用,所以不会进入if条件,函数内部什么也不会发生。
如果您尝试将 somtheing 记录到控制台或在您的函数开头警告消息,您将看到它已执行:
var callback = function() {
console.log("Callback entered !!!");
if ($(window).width() != width) {
if ($window.width() < 756) {
$(".content_lower.collapse").removeClass('in');
} else {
$(".content_lower.collapse").addClass('in');
}
}
};
编辑:
如果您仍然想在文档加载中执行它,您可以添加一个初始化为 false
的布尔标志并将其设置为 true
如果 window 调整大小然后使用它:
var $window = $(window);
var width = $(window).width();
var called = false;
var callback = function() {
console.log("callback entered !!!");
if ($(window).width() != width || !called) {
if ($window.width() < 756) {
$(".content_lower.collapse").removeClass('in');
} else {
$(".content_lower.collapse").addClass('in');
}
}
called = true;
};
$(document).ready(callback);
$(window).resize(callback);
console.log(callback.toString());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="content_lower.collapse">the div</div>
编辑 2:
更好的方法是使用布尔标志作为 callback
函数的参数,并在文档加载时用 false
调用它,在 window 上用 true
调用它调整大小:
var $window = $(window);
var width = $(window).width();
var callback = function(resized) {
if ($(window).width() != width || !resized) {
if ($window.width() < 756) {
$(".content_lower.collapse").removeClass('in');
} else {
$(".content_lower.collapse").addClass('in');
}
}
};
$(document).ready(callback(false));
$(window).resize(callback(true));
加载文档后,width
变量将设置为您的 window 宽度(假设为 500 像素)。然后它检查当前 window 宽度(即 500px)是否等于 width
var (500 !== 500
)。这个returnsfalse
,所以你的代码不会被执行。您可以这样做:
var callback = function() {
if ($(window).width() < 756) {
$('body').text($(window).width() + " - if");
} else {
$('body').text($(window).width() + " - else");
}
};
$(document).ready(callback);
$(window).resize(callback);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
这达到了预期的效果。坦克的帮助家伙。
var $window = $(window);
var width = $(window).width();
var callback = function () {
if ($window.width() < 756) {
$(".content_lower.collapse").removeClass('in');
}
else {
$(".content_lower.collapse").addClass('in');
}
};
$(document).ready(callback);
$( window ).resize(function() {
if($(window).width() != width){
callback();
}
});