2013-03-19 55 views

回答

14

以下代碼將保存當前編輯。

Slick.GlobalEditorLock.commitCurrentEdit(); 

你需要把它放在你認爲應該觸發保存的事件處理程序中。例如,如果您使用的示例文本編輯器插件,我相信一個editor-text CSS類添加到那個時候,您正在編輯一個細胞產生的輸入字段,因此這樣的事情應該工作:

$('#myGrid').on('blur', 'input.editor-text', function() { 
    Slick.GlobalEditorLock.commitCurrentEdit(); 
}); 
+0

我可能會錯過這裏的東西。從理論上講,這是有效的 - 因爲如果我將它添加到螢火蟲控制檯中,然後獲得焦點並失去焦點,它就會一次起作用。但在代碼中,即使在document.ready中,它也不起作用:\ – sunzyflower 2013-03-20 15:21:48

+0

我的錯誤是,模糊示例不起作用,因爲輸入字段是動態添加的。您需要使用'on'來綁定事件。我更新了這個例子,嘗試一下。 – clav 2013-03-20 16:07:24

+0

我收到以下錯誤: 類型錯誤:。jQuery的(...)上不是一個函數 [打破這個錯誤] \t 的jQuery( '#myGrid')上( '模糊',「輸入.editor-text',function(){ – sunzyflower 2013-03-20 20:06:13

6

我發現我需要換CLAV的處理程序超時:使用鍵盤導航時

Uncaught NotFoundError: An attempt was made to reference a Node in a context where it does not exist. 

$("#myGrid").on('blur', 'input.editor-text', function() { 

    window.setTimeout(function() { 

     if (Slick.GlobalEditorLock.isActive()) 
      Slick.GlobalEditorLock.commitCurrentEdit(); 

    }); 

}); 

,以避免類似的錯誤。據推測,新的模糊處理程序在SlickGrid可以執行自己的處理之前觸發,這會導致問題。

4

不幸的是,可能是由於事件處理的不同,Grame的版本在chrome中打破了鍵盤導航。 爲了解決這個問題,我又增加了支票只能提交編輯,如果新的焦點內容是不是在網格內其他編輯器元素(如鍵盤導航的結果):

  $('#grid').on('blur.editorFocusLost', 'input.editor-text', function() { 
       window.setTimeout(function() { 
        var focusedEditor = $("#grid :focus"); 
        if (focusedEditor.length == 0 && Slick.GlobalEditorLock.isActive()) { 
         Slick.GlobalEditorLock.commitCurrentEdit(); 
        } 
       }); 
      }); 

這似乎在當前工作Firefox,Chrome和IE等版本。