2015-11-04 4 views
0

Я пишу плагин для ckeditor, который добавит s к контенту, но у меня возникла проблема с onclick, так как это противоречит функциональности ckeditor.Onclick событие вставленной кнопки html в ckeditor

Если я зарегистрировать OnClick с помощью

commit: function(element) { 
    element.setAttribute('onclick' , 'window.location=\'' + this.getValue() + '\''); 
} 

в диалоге моей, нажимает на кнопку не откроется диалоговое окно элемента редактирования моего плагина, а отправить меня к цели кнопок OnClick.

Есть ли способ обойти это?

+0

Вы пытались использовать element.addEventListener? обратитесь к http://stackoverflow.com/questions/6348494/addeventlistener-vs-onclick –

+0

Увы, @ luis-periera, элемент параметра ссылается на элемент CKEditors [http://docs.ckeditor.com/#!/api/ CKEDITOR.dom.element], поэтому addEventListener не является функцией. Он имеет .on ('тип события', функция), но это дает то же поведение, что и исходное решение onclick –

ответ

1

После долгих споров я пришел к выводу, что использовать пользовательские onclicks i ckeditor невозможно. Вместо этого я разработал следующий обходной путь, так как я действительно заинтересован только в данных, возвращаемых из editor.getData(), чтобы быть правильным:

Вместо регистрации OnClick, как это в диалоговом

element.setAttribute('onclick' , 'window.location=\'' + this.getValue() + '\''); 

Я создал атрибутов пользовательских данных для location.href

element.setAttribute('data-custom-click' , 'location.href=\'' + this.getValue() + '\''); 

Затем в инициализации плагина, который создает кнопки и регистрирует упомянутый выше диалог, я зарегистрировал два обработчика событий

editor.on('getData', function(e) { 
    e.data.dataValue = e.data.dataValue.replace(' data-custom-click=', ' onclick='); 
}); 

editor.on('setData', function(e) { 
    e.data.dataValue = e.data.dataValue.replace(' onclick=',' data-custom-click='); 
}); 

getData пожаров, в соответствии с документацией

до возвращения GetData вызова, что позволяет для дополнительных манипуляций.

setData, с другой стороны, пожары

перед вызовом УстановитьДанные выполняется, что позволяет дополнительных манипуляций.

Таким образом, любой редактор этих обработчиков событий превратит OnClick для данных-обычая щелчок при загрузке HTML, что делает мои кнопки безопасности во время редактирования и преобразование данных любого обычая щелкните обратно OnClick, когда editor.getData (), давая мне рабочие кнопки для «реальной» страницы.

Это своего рода хак, но он работает =)