2013-05-10 93 views
0

我希望能夠抓住CKeditor中的圖像對話框時,從URL文本輸入字段獲取onfocus事件。劫持CKeditor輸入字段

我試着爲元素(id#cke_75_textInput)添加一個事件處理程序,但它只在點擊了Image按鈕後纔出現在DOM中。

查看了CKEditor 3 JavaScript API文檔,在這裏,我一直在掙扎,找不到我需要的東西。

這可以通過API來完成嗎?

+0

您不會碰巧使用jQuery,對不對?它可以幫助將該事件與代表團進行綁定。基本的JavaScript將會有更多的問題,因爲焦點事件冒泡問題 – Ian 2013-05-10 13:32:30

+2

看看[關於quirksmode的這篇小文章](http://www.quirksmode.org/blog/archives/2008/04/delegating_the .html)關於捕獲'focus','change'和其他非冒泡事件。除非你可以使用jQuery,否則這將是我的建議。 – Kiruse 2013-05-10 13:34:05

+0

我正在使用jQuery。這是如何使它更容易? – Galadai 2013-05-10 14:30:27

回答

0

有沒有必要做一些魔術焦點代表團(這是一個混亂,因爲重點沒有泡沫)。只需使用CKEditor API:

CKEDITOR.on('dialogDefinition', function(evt) { 
    if (evt.data.name == 'image') { 
     var def = evt.data.definition; 

     var onShow = def.onShow; 
     def.onShow = function() { 
      onShow && onShow.apply(this, arguments); 

      var input = this.getContentElement('info', 'txtUrl'); 
      console.log(input.getValue()); 
      input.on('focus', function() { 
       console.log('focused'); 
      }); 
     }; 
    } 
}); 

PS。 CKE4的文檔比老CKE3的文檔更少 - http://docs.ckeditor.com/#!/api/CKEDITOR.dialog

+0

這非常出色,但需要一些工作才能看到你從文檔中得到了什麼。 – Galadai 2013-05-11 17:35:59

+0

每個CKEditor包中都有一個[dialog API sample](http://ckeditor.com/latest/samples/plugins/dialog/dialog.html),[示例插件指南](http://docs.ckeditor.com/ #!/ guide/plugin_sdk_sample_1)以及我在答案中鏈接的API文檔。它需要一些時間來編譯所有這些,但所有這些都在官方文檔中。我的答案中唯一棘手的部分是如何獲取對話框實例。我重寫了對話框定義的'onShow'方法,但我認爲更簡單的解決方案可能(或應該)存在。 – Reinmar 2013-05-11 18:30:26