如何将函数参数值连接到对象文字属性名称中

时间:2013-08-15 17:30:43

标签: javascript jquery ajax

我有以下JS代码(我也使用jQuery):

jQuery(function($) {
  $(".to_manufacturer").click(function() {
    var checked = $(this).is(':checked');
    var man_id = $(this).attr("to_manufacturer_id");
    update_is_in_to(man_id, "to_manufacturer", checked)
  });
  $(".to_model").click(function() {
    var checked = $(this).is(':checked');
    var man_id = $(this).attr("to_model_id");
    update_is_in_to(man_id, "to_model", checked)
  });
  $(".to_type").click(function() {
    var checked = $(this).is(':checked');
    var man_id = $(this).attr("to_type_id");
    update_is_in_to(man_id, "to_type", checked)
  });

  function update_is_in_to (man_id_val, modelname, checked_val) {
    $.ajax({ 
      url: "/admin/catalog/to/"+modelname+"s/ajax/update_is_in_to", 
      type: "GET", 
      data: {id: man_id_val, modelname_is_in_to_val: checked_val},
      success: function(text)
      {
        //$("#total_count").html(text + " товар(ов)");
      },
      error: function(){
        alert('Ошибка обновления объекта с id = '+man_id_val+' ! Очередная попытка...');
        $.ajax(this);
      },
      dataType : "html"
    });
  }
});

我怎样才能使我的参数modelname_is_in_to_val是复合的,其中第一部分是方法参数modelname,第二部分是字符串"_is_in_to_val"

我试过了modelname + "_is_in_to_val",但收到了错误。这样做有什么用?

也不是我的代码违反了js约定?

2 个答案:

答案 0 :(得分:2)

您需要使用bracket notation并在函数外部构建对象:

function update_is_in_to (man_id_val, modelname, checked_val) {
    var data = {};
    data.id = man_id_val;
    data[modelname + '_is_in_to_val'] = checked_val;

    $.ajax({
        ...
        data: data,
        ...
    });
}

答案 1 :(得分:2)

您无法直接在对象文字语法中执行此操作。您需要先创建对象,然后使用成员运算符的方括号版本添加该属性。这使您可以评估表达式,并将其结果用作属性名称。

function update_is_in_to (man_id_val, modelname, checked_val) {
    var data = {id: man_id_val};
    data[modelname + "_is_in_to_val"] = checked_val;

    $.ajax({ 
        url: "/admin/catalog/to/"+modelname+"s/ajax/update_is_in_to", 
        type: "GET", 
        data: data,
        success: function(text)
        {
            //$("#total_count").html(text + " товар(ов)");
        },
        error: function(){
            alert('Ошибка обновления объекта с id = '+man_id_val+' ! Очередная попытка...');
            $.ajax(this);
        },
        dataType : "html"
    });
}