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

How to concate function parameter value into object literal property name

本文关键字:文字 对象 属性 连接 函数 参数      更新时间:2023-09-26

我有以下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的约定?

您需要使用括号表示法并在函数之外构建对象:

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,
        ...
    });
}

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

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"
    });
}