以下代码用于从jqGrid colmondel创建发布数据并发布。 它使用eval(),因为不知道后键/列名称。 如何用更好的东西替换eval()?
function gridValidate(elem, column, entity, eventText) {
var i,
row,
postData = { _column: column, _entity: entity },
colModel = $("#grid").jqGrid('getGridParam', 'colModel'),
val;
row = $(elem).closest('tr.jqgrow');
postData._rowid = row.attr('id');
for (i = 1; i < colModel.length; i = i + 1) {
if (colModel[i].edittype !== "textarea") {
switch (colModel[i].edittype) {
case "custom":
val = $('#' + postData._rowid + '_' + colModel[i].name).find("input").val();
break;
default:
val = $('#' + postData._rowid + '_' + colModel[i].name).val();
break;
}
eval('postData.' + colModel[i].name + '=val');
}
}
}
$.ajax('Grid/Validate', {
data: postData,
type: 'POST',
} );
}
答案 0 :(得分:2)
您可以使用.
表示法和[]
表示法来获取和设置对象属性。
具体而言,obj.a === obj['a']
。
[]
如果您不使用'
(或"
),也会接受变量,而.
表示法则不会。
所以,在你的情况下:
postData[colModel[i].name] = val;
答案 1 :(得分:2)
替换
eval('postData.' + colModel[i].name + '=val');
使用:
postData[colModel[i].name] = val;
这应该能达到你想要的效果。