2013-12-05 5 views
0

Привет всем Я работаю над jqGrid, и у меня есть небольшая проблема с настройкой в ​​редактировании строк. Я бы хотел, чтобы пользователь, находясь в режиме редактирования в строке, отключил кнопки редактирования и удаления остальных строк. Вот ссылка, чтобы показать похожую ситуацию (https://stackoverflow.com/questions/20116442/jqgrid-how-to-customize-inline-actions-buttons)!jqGrid: отключить кнопки редактирования и удаления inLine edit mode

Это код, который я использую для отключения других строк, применяющих класс 'not-editable-row' в не выбранных строках, и он отлично работает, но проблема в том, что кнопки по-прежнему активны, и пользователь может щелкнуть над ними (и таким образом также меняются кнопки на строке!). Никаких действий не выполняется, но я хочу знать, есть ли способ избежать такого поведения. выделенный текст

 ..... 
    autowidth: true, 
    colNames: ["Options","Dec Id","Address1", "Address2","Rule","Action", "Subddress1", "Subddress2", "Recode","Maybereason","Maybeid"], 
    colModel: [ 
     {name:'act',index:'act',width:55,align:'center',sortable:false,formatter:'actions', 
       formatoptions:{ 
        editbutton:true, 
        delbutton:true, 
        restoreAfterError:false, 
        keys: false, // true if we want use [Enter] key to save the row and [Esc] to cancel editing. 
        onEdit:function(rowid) { 
         $('#decisionGridPager').hide(); 
          var myGrid =$("#decisionGrid"); 
          var grid = $('#decisionGrid')[0], rows = grid.rows,cRows = rows.length, iRow, row, trClasses; 
          for (iRow = 0; iRow < cRows; iRow++) { 
           row = rows[iRow]; // row.id is the rowid 
           //alert(row.id); 
           if(rowid!=row.id){ 
           $(row).addClass('not-editable-row'); 
           var v = myGrid.jqGrid ('getCell', row, 'act'); 

           }//else{alert("current row");} 
          } 
        }, 
        onSuccess:function(jqXHR) { 
         return true; 
        }, 
        onError:function(rowid, jqXHR, textStatus) { 
          if(jqXHR.responseText !== ''){ 
          alert(textStatus+": "+jqXHR.responseText); 

          }         
        }, 

        afterSave:function(rowid) { 
         $('#decisionGridPager').show(); 
         alert("record saved"); 
        }, 
        afterRestore:function(rowid) { 
         $('#decisionGridPager').show(); 
         return false; 
        } 
       }}, 
     {name: "id", width: 20, hidden:true}, 
     {name: "address1",required:true,editable:true,edittype:'text',index:"address1",sortable:true, 
      editoptions: {dataInit:vcode,size:10, maxlength: 6}, width: 20, editrules:{required:true}}, 
     {name: "address2", editable:true, width: 20, align: "right",editoptions: {dataInit:vcode,size:10, maxlength: 6}}, 
     //dataUrl:'/wacm/rulesrv?client=true' or dataUrl:'/wacm/rulesrv' 

.......

Для того, чтобы избежать дальнейших взаимодействий в то время как работа пользователя на подряд пейджера скрывается, например, а затем вновь показал в функции afterSave, в то время как, если возникает любая проблема на стороне сервера и выполняется функция onError, пользователь вынужден решить проблему до продолжения. Моя цель - заставить пользователя работать в одной строке за раз. Большое спасибо за любой совет.

+0

Помог ли мой ответ ниже? – FastTrack

+0

Большое спасибо за ваш ответ в момент, когда у меня возникла ошибка, потому что строка, которую вы предлагаете, дает мне синтаксическую ошибку, и я работаю над устранением этой проблемы. Я заменил имя этой сетки на имя моей сетки, но я не могу получить доступ к ней. – user3069459

ответ

1

Я изменил ваше заявление if, где вы добавили класс not-editable-row. Просто замените #gridName с вашей сетки-х id:

if (rowid != row.id) { 
    $(row).addClass('not-editable-row'); 
    var v = myGrid.jqGrid('getCell', row, 'act'); 

    // hide the edit/delete buttons on non-editable rows (not the row we are editing) 
    $("#gridName tr#" + row.id + " .ui-inline-edit").hide(); 
    $("#gridName tr#" + row.id + " .ui-inline-del").hide(); 
} 
else { 
    // show the edit/delete buttons for the current row 
    $("#gridName tr#" + row.id + " .ui-inline-edit").show(); 
    $("#gridName tr#" + row.id + " .ui-inline-del").show(); 
} 

Поможет ли это?

0

Я нашел это решение, основанное на этом example:

  for (iRow = 0; iRow < cRows; iRow++) { 
      row = rows[iRow]; // row.id is the rowid 
      if(rowid!=row.id){ 
       if ($(row).hasClass("jqgrow")) { 
       $(row).hide(); 
       } 

      } 

     }` 

этот код используется, когда onEdit функции вызываются, а затем внутри функция afterSave я восстановить видимость строк ранее скрытых. Я попробовал еще одно решение, которое обрабатывало ячейки каждой строки и добавляло класс css класса addClass («ui-state-disabled»), но, конечно, пользователь все еще нажимает на кнопки, по сути, «ui-state-disabled», это только css и не может избежать взаимодействия с пользователем. Мне не нравится добавлять и удалять элементы на странице, но это единственное решение, которое я нашел до сих пор. Благодаря пользователю3069459, любой совет будет оценен.

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