我正在使用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);
}
});
};
答案 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
的是对该函数的引用。