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で、2 番目の部分は文字列"_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 = {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 に答える