jQuery的范围是each()函数吗?

我正在使用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)); } }); } 

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

救命?

谢谢!

尝试定义另一个变量:

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

如果这样可行,那么在涉及函数的参数时,闭包系统就会有一种奇怪之处。 这种行为可能是特定于浏览器的。

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

谢谢! -丰富