0

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

4

2 回答 2

2

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

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,
        ...
    });
}
于 2013-08-15T17:34:00.160 回答
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"
    });
}
于 2013-08-15T17:34:22.683 回答