【问题标题】:Run function defined as VAR定义为 VAR 的运行函数
【发布时间】:2011-10-22 16:07:23
【问题描述】:

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

我该怎么称呼它?

【问题讨论】:

  • 由于您的变量是本地范围的,您不从全局上下文中调用它吗?
  • 我在看到你的 jsfiddle 后编辑了我的答案。请看一下:)

标签: jquery


【解决方案1】:

reveal 只能在以下定义:

   var reveal = function (selector) {
       console.log("Viser billeder");
       var img = $(selector);
       img[0].src = img.data("src");
   }

在下一行的}); 之前,因为它是匿名函数私有的。

编辑

查看 jsfiddle 中的代码后,您遇到了另一个错误。首先它仍然不起作用的原因是因为在您接受@ShankarSangoll 的建议并在外部范围中添加var reveal 之后,您在内部范围中也保留了var 关键字,所以现在您只有两个名为@987654326 的变量@,外部的仍然未定义。如果您从内部删除var,它将被定义。

但是,您在 $(document).ready(function(){ ...}; 中有一个 $(function(){ ...});,这是多余的,因为您知道文档已经在您的 ready 函数中准备就绪。您可以将代码更改为:

$(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】:

您正在访问其范围之外的变量。 var/function (reveal) 是在父函数 ($(function(){...) 的内部定义的,因此它只能在该父函数的内部使用,因为它是本地的(就像任何其他局部变量一样你定义)。

【讨论】:

    【解决方案3】:

    像这样在全局范围内定义显示,它应该可以正常工作。

    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");
           }
        });
    

    【讨论】:

    • 还是不行。调用 reveal(); 在控制台中仍然给我同样的错误。
    • 我想在显示选项卡时调用该函数。这就是我需要调用它的原因。
    • 你的小提琴有几个问题。我修好了,看看jsfiddle.net/DgL7a/1
    • 您在外部范围内定义了reveal,但在函数内再次指定了`varreveal`。
    • 还有一个问题:img[0].src = img.data("src"); - 你知道为什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    相关资源
    最近更新 更多