2014-09-23 39 views
1

我有一個tablesorter項目,自從幾個月以來一直在客戶端分頁工作良好。現在我必須將其轉到服務器端分頁,但是我無法使用它與客戶端版本使用的所有功能一起使用。無法在服務器端分頁tablesorter上使用contenteditable小部件

至於主題,我的問題是使contenteditable功能工作。

我所做實現這一目標,是寫綁定到ajaxProcessing處理器上tablesorterPager配置的自定義函數:

ajaxProcessing: function (data) { 
        if (data && data.hasOwnProperty('rows')) { 
         var str = "", d = data.rows, 
          // total number of rows (required) 
          total = data.total_rows, 
          // len should match pager set size (c.size) 
          len = d.length; 

         for (var i = 0; i < len; i++) {       
          str += '<tr>'; 
          for (var column = 0; column < orderedFieldMapping.length; column++) { 
           if (orderedFieldMapping[column].toUpperCase() != 'ACTIVATIONDATE' || bReadOnly) 
            str += '<td class="' + orderedFieldMapping[column].toUpperCase() + '"' + ($('#' + orderedFieldMapping[column].toUpperCase()).prop('checked') ? '' : 'style="display:none;"') + '><div>' + (eval('d[i].' + orderedFieldMapping[column]) != null ? eval('d[i].' + orderedFieldMapping[column]) : '') + '</div></td>'; 
           else 
            str += '<td class="' + orderedFieldMapping[column].toUpperCase() + '"' + ($('#' + orderedFieldMapping[column].toUpperCase()).prop('checked') ? '' : 'style="display:none;"') + '><div ' + (eval('d[i].' + orderedFieldMapping[column]) != null ? '' : 'class="emptyPlaceholder"') + 'onmouseup="javascript:SelectActivationDateText(this);" onblur="javascript:RestoreCellStyle(this);">' + (eval('d[i].' + orderedFieldMapping[column]) != null ? eval('d[i].' + orderedFieldMapping[column]) : emptyTextString) + '</div></td>'; 
          } 
          str += '</tr>'; 
         } 

         // in version 2.10, you can optionally return $(rows) a set of table rows within a jQuery object 
         return [total, $(str)]; 
        } 
       }, 

請注意,我內返回一組表中的行jQuery對象,選項允許在文檔示例註釋中聲明(也可在此代碼示例中看到)。我這樣做的原因是我需要控制表格標記來添加樣式,處理程序和類。這就是我在循環內部所做的事情,知道我在那裏做什麼並不重要。 什麼是重要的是,我得到我的表的預期結果和標記,並且服務器端分頁正在處理沒有問題,但contenteditable部件不起作用。

我沒有在js控制檯上發出警告,所有工作都很好,但我無法編輯標記爲可編輯的列。我可以看到,也查看標記,因爲contenteditable屬性根本不存在。當然,這個小部件是初始化和配置的(與之前的版本相同,客戶端分頁)。

另一個提示,指出一些小部件故障(也許):我設法手動添加(在上面張貼的同一個函數內)標記上的contenteditable屬性,看它是否會給我一些信息。在這種情況下,我可以按照預期編輯內容,但是我沒有得到editComplete事件的處理程序,並且數據接受設置不適用。我仍然可以手動添加處理程序和自定義代碼以使其按預期工作,但這會很糟糕,我不希望使用hack來獲得已實施的功能。

任何暗示,將不勝感激,感謝大家誰會回答。

回答

0

我想我看到了這個問題。當內容被更新時(通過尋呼機,或其他),contenteditable小部件不會重新應用表格單元內的元素的contenteditable屬性。

所以這絕對是一個錯誤,我只是開了一票:https://github.com/Mottie/tablesorter/issues/732

在此同時,您可以在您的標記中包含contenteditable屬性添加到div:

str += '<td><div contenteditable>...</div></td>';