运行定义为VAR的函数

时间:2011-08-08 19:11:28

标签: jquery

我遇到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

我该如何称呼它?

3 个答案:

答案 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(就像任何其他局部变量一样)你定义)。