JavaScript 变量变量

标签 javascript php jquery variables variable-variables

假设我有对象:

function obj()
{
  this.prop1;
  this.prop2;
  this.prop3;
}

和一个对象数组

  objects = [new obj(),new obj(),new obj()];

我想使用 jquery 轻松地遍历每个对象,其中类名相当于对象的属性。

var itemsIWantToBind = ["prop1","prop2","prop3"];
for(j=0;j<itemsIWantToBind.length;j++)
{
    $("."+itemsIWantToBind[j]).unbind().blur(function(){
        var id = $(this).siblings(".objID").html();
        if(id >= 0)
        {
            objects[id].itemsIWantToBind[j] = $(this).text());
        }
    });

}

我的问题是我希望能够使用可变变量来遍历此项目

objects[id].itemsIWantToBind[j] = $(this).text());  
            ^^^^^^^^^^^^^^^^^

指示的部分没有正确绑定(bind)数组项的值,因为它试图绑定(bind)它的属性名称。

在 php 中,它与:

foreach($itemsIwantToBind as $item)
{
   $objects[$id]->$item = "Something";
}

有没有一种在 JavaScript 中执行此操作的简单方法?

最佳答案

使用括号表示法:

var o = new obj();
o.prop1 = "I'm the value";
var s = "prop1";
console.log(o[s]); // "I'm the value"

我认为这就是它与您的代码的关系:

["prop1","prop2","prop3"].forEach(function(prop) {  // **A**
    $("."+prop).unbind().blur(function(){
        var id = $(this).siblings(".objID").html();
        if(id >= 0)
        {
            objects[id][prop] = $(this).text());    // **B**
        }
    });
});

(B) 是我们实际使用名称的地方,但注意 (A) 更改为,以便我们得到一个不会更改的值。你不能只使用

// Wrong unless we also change the loop
objects[id][itemsIWantToBind[j]] = $(this).text());

因为当事件发生时j会超出数组的末尾。

forEach 是一项 ES5 功能,可以很容易地针对旧浏览器进行填充。或者您可以改用 jQuery 的 $.each:

$.each(["prop1","prop2","prop3"], function(i, prop) {  // **A**
    $("."+prop).unbind().blur(function(){
        var id = $(this).siblings(".objID").html();
        if(id >= 0)
        {
            objects[id][prop] = $(this).text());       // **B**
        }
    });
});

关于JavaScript 变量变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28681303/

相关文章:

javascript - Ajax请求表单提交问题

javascript - 可以滚动内容但不出现滚动条

javascript - ExtJS:如何动态地将子节点添加到树面板

javascript - 使用 Javascript 将选择选项大写

php - laravel 5 上 Eloquent ORM 关系

php - 提交表单后字符集错误并且也未正确插入到 mysql 数据库中

javascript - 使用散列标签进行页面导航和 anchor 导航的最佳方式是什么?

javascript - AngularJS $scope 应该只用于 View 需要访问的变量吗?

javascript - JQuery - 如果 href 等于某物,如何将类添加到特定范围

javascript - 如何实现条件中的任意数字?