我遇到Don't load hidden images ...并希望运行函数reveal
。
$(function () {
$("img").not(":visible").each(function () {
$(this).data("src", this.src);
this.src = "";
});
var reveal = function (selector) {
console.log("Viser billeder");
var img = $(selector);
img[0].src = img.data("src");
}
});
但是怎么样?
如果我这样做:
reveal();
它在控制台中返回:
reveal is not defined
我该如何称呼它?
答案 0 :(得分:4)
在这样的全局范围内定义显示,它应该可以正常工作。
var reveal;
$(function () {
$("img").not(":visible").each(function () {
$(this).data("src", this.src);
this.src = "";
});
reveal = function (selector) {
console.log("Viser billeder");
var img = $(selector);
img[0].src = img.data("src");
}
});
答案 1 :(得分:1)
reveal
仅在以下时间定义:
var reveal = function (selector) {
console.log("Viser billeder");
var img = $(selector);
img[0].src = img.data("src");
}
在下一行的});
之前,因为它是匿名函数的私有。
修改强>
在查看jsfiddle中的代码后,您还有另一个错误。首先,它仍然不起作用的原因是因为在你采用@ ShankarSangoll的建议并在外部范围中添加var reveal
之后,你将var
关键字保留在内部范围中,所以现在你只有两个名为reveal
的变量,外部变量仍未定义。如果从内部删除var
,则会定义它。
但是$(function(){ ...});
内部有一个$(document).ready(function(){ ...};
,这是多余的,因为您知道该文档已准备就绪。你可以将你的代码更改为:
$(function() {
var reveal;
console.log("Billeder vises");
$("img").not(":visible").each(function() {
$(this).data("src", this.src);
this.src = "";
});
var reveal = function(selector) {
var img = $(selector);
img[0].src = img.data("src");
}
reveal();
});
或者完全删除$(function(){ ...});
包装器,因为这会延迟脚本。您还需要将选择器传递给reveal()
,但我认为您知道:)
答案 2 :(得分:0)
您正在访问其范围之外的变量。 var / function(reveal)是在父函数($(function(){...)的INSIDE中定义的,所以它只能在那个父函数的INSIDE中使用,因为它对它是LOCAL(就像任何其他局部变量一样)你定义)。