1

私は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' がまだスコープ内にある必要があることを示していますが、そうではないようです...

ヘルプ?

ありがとう!

4

2 に答える 2

0

別の変数を定義してみてください:

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

それが機能する場合、関数のパラメーターに関しては、クロージャー システムに奇妙な点があります。この種の動作は、ブラウザ固有のものである可能性があります。

于 2009-09-09T00:52:41.857 に答える
0

既知の適切なスコープ (setColor 関数の親) で一時変数を使用することになりました。間違いなくハックですが、機能します。これを正しい方法で修正する方法を知っている人がいたら、教えてください。:)

ありがとう!-リッチ

于 2009-09-09T18:54:38.933 に答える