Jquery的
operations = {
index: 0,
update: function(target) {
proxiedThis = this;
return function(event) {
target.append(proxiedThis.index);
}
}
}
options = $.extend(operations);
options.index = 1;
$.each($('.clickable'), function(i, element) {
$(element).on('click', $.proxy(operations.update, options, $('#target')).call());
options.index += 1;
});
HTML
<html>
<!-- include jQuery -->
<body>
<p class="clickable">click-me-1</p>
<p class="clickable">click-me-2</p>
<p class="clickable">click-me-3</p>
<p id="target">Target</p>
</body>
</html>
我想要实现的目标
在为$.each
块中的每个元素注册回调处理程序时,我想传递不同的options.index
变量。第一个1
,第二个2
,第三个3
。
现在发生的事情是: 它将3(循环中的最后一个值)传递给所有回调处理程序。
还想知道:为什么会发生这种情况
代码也可在jsFiddle
中找到答案 0 :(得分:2)
问题是options
是每个回调的相同对象。你能做的是
$.each($('.clickable'), function(i, element) {
var options = $.extend({}, operations);
options.index = i + 1;
$(element).on('click', $.proxy(operations.update, options)($('#target')) );
});
此外,您必须确保proxiedThis
不是全球var proxiedThis = this;