为了测试按钮的行为,我创建了一个插件,在编辑器文本中插入了一个type =“button”的输入元素。最后,当我点击该插入按钮时,应弹出警报。按预期插入input元素时,永远不会调用alert()。但很奇怪,在插入元素之前不久就会调用alert()。这是执行命令时将触发的函数
...
exec: function( editor ) {
var linkHtml = '<input type="button" value='+"click me"+' onclick="'+alert("hello you clicked a button")+'"></input>';
var linkElement = CKEDITOR.dom.element.createFromHtml(linkHtml, editor.document);
editor.insertElement(linkElement);
}
...
任何暗示这里发生了什么?
答案 0 :(得分:1)
var linkHtml = '<input type="button" value='+"click me"+' onclick="'+alert("hello you clicked a button")+'"></input>';
此代码:
'<input type="button" value='+"click me"+' onclick="'
alert("hello you clicked a button")
并将结果附加到上一个字符串。因此alert()
立即执行。'"></input>'
附加到上一个字符串。所以正确的代码是:
var linkHtml = '<input type="button" value='+"click me"+' onclick="alert(\'hello you clicked a button\')"></input>';
但是,CKEditor在处理内容时会转换所有on*
属性,因为在编辑时不应执行它们。因此,如果您想在编辑器中单击<input>
,那么您需要采用不同的方式。请参阅此问题CKEditor's click event not firing。