javascript - 将动态元素绑定(bind)到函数;只剩下一个绑定(bind)

标签 javascript jquery

我的配置(作为示例)的设置如下:

this.config = [
    {
        element: '#Amount',
        type: "money",
        notNull: true,
        error: "You must specify an amount"
    },
    {
        element: '#Type',
        type: "string",
        notNull: true,
        error: "You must specify whether you want a 6 week loan or a 12 month loan"
    }
]

我有一个绑定(bind)函数,应该将验证函数绑定(bind)到列表中的每个元素:

this.bind = function () {
    for (var i = 0; i < _this.config.length; i++) {
        var arr = _this.config[i];
        console.log('Binding ' + arr.element + ' to single input validation')
        // bind single validation to each element
        $(document).on('keyup', arr.element, function () {
            _this.validate(arr.element)
        })
    }
}

在控制台中我看到:

Binding #Amount to single input validation
Binding #Type to single input validation
Binding #LoanPurpose to single input validation

该配置实际上由 47 个元素组成,但是我确信在迭代配置后仅保留最后一个绑定(bind),因此就好像它每次都替换以前的绑定(bind)。

任何指示将不胜感激

谢谢

最佳答案

这是一个典型的 JavaScript 错误。您的嵌套 keyup 处理函数引用了一个变量 arr,该变量在每次迭代时都会被 for 循环覆盖。因此,当 keyup 处理程序最终执行时,它使用 arr 引用 this.config 数组中的最后一个元素。

此链接说明 why it's bad to make functions within loops 。并为其提供了解决方案。

您的代码可能应如下所示:

this.bind = function () {
    for (var i = 0; i < _this.config.length; i++) {
        var arr = _this.config[i];
        console.log('Binding ' + arr.element + ' to single input validation')
        // bind single validation to each element
        _this.makeBind(arr.element)
    }
}

this.makeBind = function (el) {
    $(document).on('blur', el, function () {
        _this.validate(el)
    })
}

关于javascript - 将动态元素绑定(bind)到函数;只剩下一个绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37198984/

相关文章:

javascript - 滚动到 div,防止第二次点击

javascript - 结合 AngularJS、jQueryUI、Angular-Drag-Drop 排序列表

javascript - Node.js - events.js 抛出错误

javascript - 提供替代 Flash 内容

jquery - 按键时的jQuery声音

javascript - 单击下一步按钮时自动调整大小至全屏

javascript - Jquery calc math 在小型设备中无法正常工作

jquery - 欺骗 ASP.NET 认为请求是 jQuery 文件上传的 Ajax 请求

jQuery - 如何只选择包含在链接中的图像?

javascript - 当浏览器屏幕分辨率改变时动态改变模式的高度和宽度