2014-09-14 3 views
0

меня это jqgrid так:Знаете ли вы, что правильно отредактировали «это» для jqgrid?

$("#MyTable").jqGrid({ 
     height: 600, 
     url: 'list.json', 
     colNames: ColN, 
     colModel: Colm, 
     sortable: true, 
     multiselect: true, 
loadComplete: function() { 

getEditPage('#MyTable'); 

} 
}); 

функция getEditPage является:

function getEditPage(tableId,objectType){ 
    var ids = $(tableId).jqGrid('getDataIDs'); 
     var idList = ""; 
     for (var i = 0; i < ids.length; i++) { 
     idList = idList + ids[i] + " "; 
     } 

    for (var i = 0; i < ids.length; i++) { 
     $('#'+ids[i]+' a').click(function(e) {editClickEvent(e, tableId, objectType, idList);}); 
    } 
    if ($(tableId + '_forzen')) { 
      $(tableId + '_frozen tr').slice(1).each(
        function() { 
         $('td', this).each(
           function() { 
            $('a', this).click(function(e) {editClickEvent(e, tableId, objectType, idList);}); 
           } 
         ); 
        }); 
     } 
}; 

Вот editClickEvent:

var editClickEvent = function(e, tableId, objectType, idList) { 
    $(window).unbind("beforeunload"); 
    var myHash = e.currentTarget.hash;  // string like "#?id=0" 
    var id = myHash.substring(5, myHash.length); // getting row Id 
    if (id.indexOf("&") >=0) { 
     id = id.substring(0, id.indexOf("&")); 
    } 
    if (myHash.substring(0,5) === '#?id=') { 
     var rowData = $(tableId).jqGrid('getRowData', id); 
     var param = myHash.substring(myHash.length-1); 
     if (objectType) { 
      param = objectType; 
     } 
     if(param == 'D'){ 
      var cellValue = this.textContent || this.innerText; 
      if((cellValue.search('\n') != 0)&&(cellValue.lastIndexOf('\n')==cellValue.indexOf('\n')))  { 
       var m_Id = rowData.id; 
       var m_Id = m_Id.substring(0,m_Id.length-1); 
       var url = 'path'; 
       hasPermissionByIds('M', m_Id, 1, gotoPage, url); 
      } else if(cellValue.search('\n') != 0){ 
       var cellValueArray = makeArray2(cellValue); 
       var cellIdsArray = makeArray2(rowData.id); 
       createPromtDialog(cellValueArray, cellIdsArray, param);         
      } 
e.preventDefault(); 
}; 

Проблема заключается в var cellValue = this.textContent || this.innerText;. textContent и innerText не определены. Я знаю, что это проблема «этого», на которую ссылаются неправильно. У вас есть идея, что я могу это исправить?

ответ

0

Вы должны изменить вызов функций editClickEvent и getEditPage так что вперед значение this (см here и here). Например

$('#'+ids[i]+' a').click(function(e) {editClickEvent.call(this, e, ... 

вместо

$('#'+ids[i]+' a').click(function(e) {editClickEvent(e, 

или

getEditPage.call(this, '#MyTable'); 

вместо

getEditPage('#MyTable'); 

Кстати после использования .call вы можете изменить код getEditPage, чтобы получить значение id таблицы от tableId: this.id будет "MyTable". Таким образом, "#" + this.id равно "#MyTable".

+0

Большое спасибо. Это проблема: – user3833823

+0

@ user3833823: Добро пожаловать! – Oleg

Смежные вопросы