【问题标题】:Scope of jQuery each() function?jQuery each() 函数的范围?
【发布时间】:2010-11-26 16:37:04
【问题描述】:

我正在使用 jQuery ColorPicker 小部件 - 特别是在执行 ColorPickerSetColor 函数(内部只是“setColor”)。代码摘录:

        setColor: function(col) {
            if (typeof col == 'string') {
                col = HexToHSB(col);
            } else if (col.r != undefined && col.g != undefined && col.b != undefined) {
                col = RGBToHSB(col);
            } else if (col.h != undefined && col.s != undefined && col.b != undefined) {
                col = fixHSB(col);
            } else {
                return this;
            }
            return this.each(function(){
                if ($(this).data('colorpickerId')) {
                    var cal = $('#' + $(this).data('colorpickerId'));
                    cal.data('colorpicker').color = col;
                    cal.data('colorpicker').origColor = col;
                    fillRGBFields(col, cal.get(0));
                    fillHSBFields(col, cal.get(0));
                    fillHexFields(col, cal.get(0));
                    setHue(col, cal.get(0));
                    setSelector(col, cal.get(0));
                    setCurrentColor(col, cal.get(0));
                    setNewColor(col, cal.get(0));
                }
            });
        }

小部件中似乎存在错误。在 each() 调用内部检查时,'col' 参数是未定义的。我已经阅读了文档和其他示例,我能找到的所有内容都表明,当 each() 调用执行函数时,'col' 应该仍然在范围内,但它似乎不是......

帮助?

谢谢!

【问题讨论】:

  • 你确定在返回 this.each 之前定义了 col 吗?
  • 是的,我确定。如果我们在返回 this.each 之前和之后添加一个 console.log(Firebug 的日志记录命令),第一个 log() 命令输出一个有效值,而第二个只输出 undefined...

标签: javascript jquery scope each


【解决方案1】:

尝试定义另一个变量:

 setColor: function(xCol) {
     var col = xCol;
     // ...
 }

如果这样可行,那么当涉及到函数的参数时,闭包系统就会出现奇怪的情况。这种行为可能是特定于浏览器的。

【讨论】:

  • 嗨,约翰!感谢您的回答。不幸的是,它没有用......还有其他想法吗?
  • 尝试在 return 语句之前将函数设置为一个变量,然后将该变量作为参数传递给“return this.each(f);”如果这没有帮助,您需要发布更多代码。
【解决方案2】:

我刚刚在已知良好的范围(setColor 函数的父级)中使用了一个临时变量。绝对是一个黑客,但它有效。如果有人知道如何以正确的方式解决此问题,请告诉我。 :)

谢谢! -丰富

【讨论】:

  • 如果您有时间和愿望,您应该编写一段非常简单的代码来复制该问题。在执行此操作的过程中,您甚至可能会了解它发生的原因。如果有,请在此处发布。
猜你喜欢
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
相关资源
最近更新 更多