我有以下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约定?
答案 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"
});
}