如何从jqgrid colmodel创建post数据时删除eval

时间:2011-09-05 14:45:01

标签: javascript jquery jqgrid jslint

以下代码用于从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',
        } );
}

2 个答案:

答案 0 :(得分:2)

您可以使用.表示法和[]表示法来获取和设置对象属性。

具体而言,obj.a === obj['a']

[]如果您不使用'(或"),也会接受变量,而.表示法则不会。

所以,在你的情况下:

postData[colModel[i].name] = val;

答案 1 :(得分:2)

替换

eval('postData.' + colModel[i].name + '=val');

使用:

postData[colModel[i].name] = val;

这应该能达到你想要的效果。