2011-05-23 115 views
1

我有一個網格用於編輯用戶(權限,名稱等)。
我也有一個密碼字段,它在編輯模式下是隻寫的。
含義 - 密碼不顯示,但如果用戶爲此字段插入一個值,則密碼將被更改。
我的問題是,編輯現有的用戶時,我顯然希望密碼字段是可選的。但是當添加一個新用戶時,我想讓這個字段是必需的。
這是如何實現的?
謝謝jqgrid不同editrules添加和編輯時

回答

2

對於您的問題,您可以在編輯和添加時使用不同的驗證方法。

例如:

 
function validate_add(posdata, obj) 
{ 
    if(posdata.PASSWORD==null || posdata.PASSWORD=="" || posdata.PASSWORD==undefined) 
    return [false, "Please enter the pasword"];

return [true, ""]; }

function validate_edit(posdata, obj) { //you can ignore this because you dont want to verify password }

// in jqgrid

grid.navGrid('#pager',{add:true,addtext:'Add',edit:true,edittext:'Edit',del:true,deltext:'Del', search:true,searchtext:'Find',refresh:true}, //options {width:700,reloadAfterSubmit:true, beforeSubmit:validate_edit}, // edit options {width:700,reloadAfterSubmit:true, beforeSubmit:validate_add}, // add options {}, //del options {} //search options );

+0

你是對的,'beforeSubmit'可以用於自定義驗證。所以,從我+1。在你的答案被接受後,我會發布另一種方式的描述:如何使用*標準驗證*與'editrules',但是**添加和編輯對話框有兩個不同的**'editrules'值。 – Oleg 2011-05-23 10:24:20

+0

恐怕你不能這樣做editrules,因爲editrules是common_rules模塊,這是常見的添加和編輯...它會很好,如果你可以做到這一點... – Sandeep 2011-05-23 10:51:29

+0

@Sandeep:有沒有辦法**定義**不同的'editrules',但是可以**改變'beforeCheckValues'方法內'editrules'對象的值,或者其他[form編輯事件](http://www.trirand .com/jqgridwiki/doku.php?id = wiki:form_editing#events)在驗證檢查之前調用。 – Oleg 2011-05-23 10:57:14

1

桑迪普發佈正確的代碼,因爲beforeSubmit可用於自定義驗證。

有其他方法可以做你想做的事。一個不能定義不同editrules,但可以更改beforeCheckValues方法內部的editrules對象的值,例如或其他一些form edit eventsform edit events之前驗證檢查。

這裏是代碼的架構,可以改變editrules

var grid = $("#list"), 
    getColumnIndexByName = function(columnName) { 
     var cm = grid.jqGrid('getGridParam','colModel'), // grid[0].p.colModel 
      i=0, l=cm.length; 
     for (; i<l; i++) { 
      if (cm[i].name===columnName) { 
       return i; // return the index 
      } 
     } 
     return -1; 
    }, 
    addEditrulesPassword={required:true /*some other settings can follow*/}, 
    editEditrulesPassword={required:false /*some other settings can follow*/}; 

// ... first of all we define the grid 
grid.jqGrid({ 
    // all parameters including the definition of the column 
    // with the name 'Password' inside of `colModel` 
}); 

grid.jqGrid(
    'navGrid','#pager',{/*navGrid options*/}, 
    {//Edit dialog options 
    }, 
    {//Add dialog options 
     beforeCheckValues:function(postdata,$form,oper) { 
      // get reference to the item of colModel which correspond 
      // to the column 'Password' which we want to change 
      var cm = grid[0].p.colModel[getColumnIndexByName('Password')]; 
      cm.editrules = addEditrulesPassword; 
     }, 
     onclickSubmit:function(ge,postdata) { 
      // get reference to the item of colModel which correspond 
      // to the column 'Password' which we want to change 
      var cm = grid[0].p.colModel[getColumnIndexByName('Password')]; 
      cm.editrules = editEditrulesPassword; 
     } 
    } 
); 
2

我使用方法「setColProp」這個

...... 
{ //Edit dialog options 
beforeCheckValues: function(postdata, formid, mode) { 
    grid.setColProp('Password', {editrules: {required: false}}); 
}, 
{ //Add dialog options 
beforeCheckValues: function(postdata, formid, mode) { 
    grid.setColProp('Password', {editrules: {required: true}}); 
} 
0

我找到了聯編輯有點髒的解決方案:

function inlineCustomValidation(value, colname) { 

     var savedRow = jQuery("#grid").getGridParam("savedRow"); 

     if (savedRow[0].some_required_field == "") 

      //add operation validation 

     } else { 

      //edit operation validation 

     } 
    }; 

savedRow array。這是一個只讀屬性,用於內聯和單元格編輯模塊以存儲數據,然後編輯行或單元格。請參閱單元格編輯和內聯編輯。

0

下面的腳本來驗證的jqGrid聯編輯細胞,它不會允許用戶以不同的點輸入任何特殊字符(。)用於指定小數點

{ name: 'Amount', width: 22, label: 'Cost', editable: true, align: "right", sorttype: 'int', search: false, formatter: 'currency', formatoptions: { prefix: "$", thousandsSeparator: ",", decimalPlaces: 2, defaultValue: '0.00' }, 
      editoptions: { 
       dataInit: function(element) { 
        $(element).keypress(function (e) { 
         if (e.which != 8 && e.which != 0 && e.which != 46 && (e.which < 48 || e.which > 57)) { 
          return false; 
         } 
        }); 
       } 
      } 
     }, 
相關問題