0

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

3 回答 3

2

将对函数本身的引用传递给each,而不是函数的计算结果。换句话说,使用self.ApplyColorPicker而不是self.ApplyColorPicker().

 var elements = $('.colorpickerHolder');
 elements.each(self.ApplyColorPicker);
于 2012-09-07T18:00:35.283 回答
2

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

elements.each(self.ApplyColorPicker); //Without the () after ApplyColorPicker
于 2012-09-07T18:00:54.453 回答
1

你需要做:

elements.each(self.ApplyColorPicker);

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

于 2012-09-07T17:51:42.067 回答