在jquery回调处理程序中保留变量

时间:2015-08-19 08:46:17

标签: javascript jquery

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

中找到

1 个答案:

答案 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;

Working fiddle