web-dev-qa-db-ja.com

カスタムフォーマッタテキストフィールドの値が空の場合に、選択した行をjQgridから選択解除する方法

JQgridのチェックボックスをオンにしようとすると、問題のない値が選択されます。テキストフィールドに値を入力せずにカスタムフォーマッタテキストフィールドがあり、チェックボックスを選択しようとすると、その後にアラートメッセージが表示されます。チェックボックスをオフにしますが、フォーカスがグリッドから削除されません。

スクリーンショットを添付しましたので、答えを教えてください。

コードはここに貼り付けられます:

    jQuery("#list1").jqGrid({               

        url:actionurl,
        mtype: 'POST',          
        colNames:['PartnerId', 'Employee No','Employee Name' ,'Position', 'Position Id', 'Wages','Relieve Date','Days Required'],
        colModel:[                    
                      {name:'partnerId',index:'partnerId', width:280,sortable:true,search:false, hidden: true},
                      {name:'em_ka003_employeeno',index:'em_ka003_employeeno', width:200,sortable:true},
                      {name:'empname',index:'empname', width:280,sortable:false,search:false},
                      {name:'position',index:'position', width:250,sortable:false,search:false},
                      {name:'positionId',index:'positionId', width:0,sortable:false,search:false,hidden:true},                    
                      {name:'wages',index:'wages', width:100,sortable:false,search:false},                        
                      {name:'emp_relievedate',index:'emp_relievedate', width:200,sortable:false,search:false},
                      {name:'daysrequired',index:'daysrequired', width:140,sortable:false,search:false,formatter:createText},
                ],

        rowNum:10,
        rowList:[5,10,15],
        pager: '#pager1',         
        sortorder: "asc",
        sortname: 'em_ka003_employeeno', 
        viewrecords: true,
        rownumbers: true,
        loadonce: false,
        forceFit: true,
        datatype: 'xml',
        multiselect: true , 
        footerrow:true,
        userDataOnFooter:true,
        onSelectRow: function(rowId)
            { 
                handleSelectedRow(rowId); 
            },
        caption: "<b>Labor Extension",
        gridComplete: function() {          

            $.unblockUI();
        }



});

これは私のカスタムフォーマッター関数です:

function createText(el, cellval, opts)
    {
         return "<span><input class='dojoValidateValid required TextBox_OneCell_width number' type='text' id='days_req"+cellval.rowId+"' name='days_req"+cellval.rowId+"'  onKeyPress='return checkIt(event,false)'/></span>";

    }

function handleSelectedRow(id) 
{

var jqgcell     = jQuery('#list1').getCell(id, 'partnerId');
var daysrequired = jQuery("#days_req"+id+"").val();
var cbIsChecked = (jQuery("#jqg_list1_"+jqgcell).attr('checked'));

if(cbIsChecked==true)
 {

    /* Append the Days Required */


if(daysrequired=="")
    {

        alert("please enter the extension days");
        jQuery("#days_req"+id+"").focus();
        jQuery("#jqg_list1_"+jqgcell).attr('checked', false);
          jQuery('#list1').restoreRow(id);

        return false;
    }



 }

In first screen shot if the user if selecting the check box without entering the value in textbox it shows alert.In second screen shot the focus is not get removed.

15
simbu94

私は答えを得ました。

その時点でjqgridで特定の行を選択しているときにテキストフィールドの値がゼロの場合は、JavaScriptでそれを検証し、グリッドから選択した行のチェックを外します。

以下に貼り付けた作業コードは次のとおりです:

if(daysrequired=="0")
    {
        myGrid.jqGrid('resetSelection');
    }
  • myGridは私のグリッドIDです。
  • resetSelectionは、選択した行の選択を解除するjQGridのメソッドです。
28
simbu94