$ .each()函数调用时上下文发生了变化

时间:2012-09-07 17:50:20

标签: javascript jquery knockout.js

我正在使用Jquery $ .each来获取属于特定类的所有元素,并且我想逐个调用每个元素。为此,我调用了以下函数:

 var elements = $('.colorpickerHolder');
                    elements.each(self.ApplyColorPicker());

我可以在运行时看到元素有三个正确的元素。现在,当我调用self.ApplyColorPicker时,我用$(this)引用每个当前元素。令人惊讶的是,$(this)不是当前元素。

我的代码在淘汰框架下工作,两段代码都在viewModel下。在ApplyColorPicker内部$(this)成为我的viewModel。我不知道为什么会这样。任何推理?

以下是我的ApplyColorPicker代码:

 self.ApplyColorPicker = function () {
           $(this).ColorPicker({
                color: '#0000ff',
                onShow: function (colpkr) {
                    $(colpkr).fadeIn(500);
                    return false;
                },
                onHide: function (colpkr) {
                    $(colpkr).fadeOut(500);
                    return false;
                },
                onChange: function (hsb, hex, rgb) {
                    $(this).css('backgroundColor', '#' + hex);
                }
            });
        };

3 个答案:

答案 0 :(得分:2)

将函数本身的引用传递给each,而不是函数求值的引用。换句话说,使用self.ApplyColorPicker代替self.ApplyColorPicker()

 var elements = $('.colorpickerHolder');
 elements.each(self.ApplyColorPicker);

答案 1 :(得分:2)

看起来你在ApplyColorPickers语句中调用.each,这意味着它只被调用一次并将该函数的结果传递给.each,而不是引用功能。这应该工作:

elements.each(self.ApplyColorPicker); //Without the () after ApplyColorPicker

答案 2 :(得分:1)

你需要这样做:

elements.each(self.ApplyColorPicker);

问题是self.ApplyColorPicker()实际调用了该函数。您需要传递给$.each的是对该函数的引用。