2013-01-09 28 views
1

我有一個jqgrid,有主要行和一個頁腳行(用戶數據加載),然後格式化程序,改變單元格中的數據可鏈接。可以單擊主體中的單元格,onCellSelect事件將捕獲點擊。但是,單擊頁腳行中的數據似乎不會觸發onCellSelect事件。如何捕獲頁腳行中的選擇/點擊事件?以下是jqgrid的腳本。是一個jqgrid可選/可點擊的頁腳行嗎?

$('#jqgSummaryResults').jqGrid({ 
     datatype: 'json', 
     mtype: 'GET', 
     url: 'some action', 
     postData: { 'criteria': function() { 
      some function}}, 
     rowNum: 100, 
     rowList: [], 
     pager: '#jqgpSummaryResults', 
     viewrecords: true, 
     sortorder: 'asc', 
     sortname: 'DateField', 
     width: 1250, 
     height: 350, 
     shrinkToFit: true, 
     gridview: true, 
     footerrow: true, 
     userDataOnFooter: true, 
     onCellSelect: function (rowid, iCol, cellcontent, e) { 
      var selectedDate = rowid; 
      savedMailDueDateString = rowid; 
      var selectedColumn = iCol; 
      ... 
     }, 
     loadComplete: function (data) { 
      ... 
     }, 
     colNames: ['DateField', 
        'Total Jobs', 
        ... 
        '% Not Mailed'], 
     colModel: [ 
        { name: 'DateField', index: 'DateField', align: 'left' }, 
        { name: 'TotalJobs', index: 'TotalJobs', align: 'left', formatter: hyperlinkColumnFormatter }, 
        ... 
        { name: 'PercentNotMailed', index: 'PercentNotMailed', align: 'left', formatter: hyperlinkColumnFormatter }, 
        ] 
    }).navGrid('#jqgpSummaryResults', { 
     excel: false, 
     edit: false, 
     add: false, 
     del: false, 
     search: false, 
     refresh: false 
    }); 

感謝您的協助。

+0

你解決這個問題? – Mark

+1

如果問題得到解決,您能否請您將答案標記爲正確? – Mark

+1

@Gill Bates:給答案寫一些評論會很禮貌。 – Oleg

回答

2

雖然我沒有看到任何方式讓jqGrid響應select(甚至似乎沒有可選的頁腳)或點擊。頁腳行由ui-jqgrid-sdiv類指定。您可以附加一個點擊事件處理程序如下。

$('.ui-jqgrid-sdiv').click(function() {alert('Bong')}); 

編輯:在回答吉爾·貝茨問題補充頁腳的事件,但只有在單個細胞上的選擇將是:

$('.ui-jqgrid-sdiv').find('td[aria-describedby="GridName_ColumnName"]').click(function() { alert("Bong");}); 

GridName_ColumnName是所有頁腳TD詠歎調 - describedby格式,你可以通過firebug元素檢查器(或其任何等價物)看到確切的名稱。

+0

'onCellSelect'在jqGrid主體的* all *元素上設置了一個'click'事件處理程序。以同樣的方式,你可以使用你的原始結構'$('。ui-jqgrid-sdiv')。click(function(e){...})'替代整個頁腳上的'onCellSelect'。 'var $ td = $(e.target).closest(「td」);'得到'footer的單擊單元格'​​'。 'var iCol = $ .jgrid.getCellIndex($ td);'或者只是'var iCol = $ td [0] .cellIndex;'獲取單擊單元格的列索引。列名是$('#jqgSummaryResults')。jqGrid(「getGridParam」,「colModel」)[iCol] .name'。所以我仍然認爲即使是原始的'$('。ui-jqgrid-sdiv')。click'也能提供正確的答案。 – Oleg

+0

@Oleg酷,我必須檢查選擇器jQuery'最接近',因爲我從來沒有機會使用它。奧列格再一次真正感謝你對答案的深度,因爲它給了我進一步研究概念,學習和變得更好的背景和麪包屑。 – Mark

+0

不客氣! [The answer](http://stackoverflow.com/a/13765086/315935),[另一個](http://stackoverflow.com/a/14537512/315935)或[this one](http:// stackoverflow .com/a/5305904/315935)提供了所述方法的例子。所以我仍然認爲你的原始答案是正確的,儘管它沒有更多的實現細節。最好的祝願! – Oleg

1

jqGrid寄存器click事件在主要網格<table>上,但它並不總是調用onCellSelect。首先(見here)它測試一些附加條件,然後返回(忽略click事件),如果條件失敗。例如,如果點擊網格的分組標題,回調onCellSelect將不會被處理。

頁腳行問題,因爲它存在以外的網格。主<table>元素放置在div.ui-jqgrid-bdiv的內部,但頁腳位於的內部,另一個表位於div.ui-jqgrid-sdiv的內部。可以使用Internet Explorer,Google Chrome,Firebug或其他開發工具檢查jqGrid的HTML結構。一會(在上面的圖片<table id="list">和獲取類「UI-的jqGrid-BTABLE」)看到以下

enter image description here

主要<table>元素和另一個表元素與頁腳(其中獲取類「ui-jqgrid-ftable」)分別爲

因此,馬克在你問題上的第一個答案是正確的。如果頁面上有多個網格,則可指定使用特定網格的頁腳

var $grid = $('#jqgSummaryResults'); // one specific grid 

.... // here the grid will be created 

$grid.closest(".ui-jqgrid-view").find(".ui-jqgrid-sdiv").click(function() { 
    // do in case of the footer is clicked. 
    var $td = $(e.target).closest("td"), 
     iCol = $.jgrid.getCellIndex($td); // or just $td[0].cellIndex, 
     colModel = $grid.jqGrid("getGridParam", "colModel"); 

    // $td - represents the clicked cell 
    // iCol - index of column in footer of the clicked cell 
    // colModel[iCol].name - is the name of column of the clicked cell 
}); 

P.S.在the old answer中描述了網格的許多其他元素。說明不完整,但可能有幫助。

+0

'.closest()'岩石,以前從未使用過,謝謝! –

+0

@GillBates:不客氣!如果你對我的回答給予賞金,你可以接受馬克的回答,因爲他的回答是對的,但是沒有足夠的細節。 – Oleg

+0

林不是問題的作者,我只是補充賞金:) –

0

在這裏,小實現了這個問題,我在jQuery和jqGrid的新的,但我有以上@Oleg和@馬克的同樣的問題,由於兩個職位,進出口實現類似的東西:

// Raport1Grid - 我的jqGrid的名字
//最終用戶,adminusers,decretusers - 我在colModel行的名稱
// Raport1Grid_endusers - GridName_ColumnName

var endUsers = $("[aria-describedby='Raport1Grid_endusers']").click(function(){ 
    //remove previous style of selection 
    $('.ui-jqgrid-ftable').find('.selecteClass').removeClass('selecteClass'); 
    //set selection style to cell 
    $(endUsers).addClass('selecteClass');  
}); 

selectedCell

的//還可以得到價值0
var qwer = $("[aria-describedby='Raport1Grid_endusers']").text(); 
alert(qwer); 

演示這裏 http://jsfiddle.net/Tobmai/5ju3py83/