2011-09-05 88 views
0

下面的代碼用於從jqGrid colmondel創建發佈數據併發布。 它使用eval(),因爲未知鍵名/列名。 如何用更好的東西替換eval()?如何從jqgrid colmodel創建發佈數據時刪除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

您可以使用.記號和符號[]獲取和設置對象屬性。

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

[]接受一個變量,以及如果你不使用'(或"),而.符號沒有。

所以,你的情況:

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

更換

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

有:

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

這應該完成你想要的。