Javascript 参数被覆盖

标签 javascript jquery parameter-passing jquery-events

我有类似的代码:

for (i = 0; i < imageData.length; i++) {

    for (j = 0; j < sizes.length; j++){
        width = sizes[j][0];
        height = sizes[j][1];

        objectId = 'cropper-' + i + '-' + j;
        var $image = $('#' + cropperId + ' > img'),
            $preview = $('#preview_cropper-' + i + '-' + j),
            $btn = $('strict-mode_cropper-' + i + '-' + j);

        var options = {
            ...
            width: width,
            height: height,
            $preview: $preview, 
            ...
        };
        $btn.on("click", {$image: $image, options: options}, foo);
    }
}


function foo(e) {
    var $image = e.data.$image; // Gives the correct Image
    var $preview = e.data.options.$preview // Always the last $preview. Not the one that was passed in!
    var width = e.data.options.width //Also incorrect
    var height = e.data.options.height //Also incorrect
}

问题是,当用户单击 $btn 之一时,“options”中的所有字段始终是嵌套循环的最后一个字段(即,当 i = imageData.length - 1 和 j = 尺寸.长度 - 1)。 #

奇怪的是,传入的 $image 是正确的!

为什么会发生这种情况?我该如何解决这个问题?

最佳答案

在 for 循环中,“选项”包含映射

preview: $preview, 

意味着存储在“选项”中的名称只是“预览”。所以你需要访问预览为

e.data.options.preview

而不是

e.data.options.$preview

关于Javascript 参数被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29373980/

相关文章:

javascript - 使用另一个下拉列表操作下拉列表

数据属性中的 Javascript 正则表达式

javascript - 需要在 Grid 元素中显示手形光标

javascript - 用于获取正在单击的按钮附近的 'a' 标签的 href 的 jquery 代码

php - Ajax/jquery 如何在不刷新页面的情况下从按钮单击发送数据

javascript - 当元素数据更改时,jQuery 的 data() 属性不会更新

javascript - 替换javascript中的所有字符实例

Javascript 将对象作为函数参数传递

python-2.7 - 使用 .bind 时如何传递参数?

c - 传递一个参数数量不确定的函数,并使用可变参数调用它