我不能让我的addEventListener工作

问题描述:

我有这个函数在一个单独的文件,并且它调用另一个JavaScript函数时加载。我需要这样做才能达到JavaScript文本编辑器实现的“word_number”id。这个编辑器加载,然后我打电话给我的功能。”我不能让我的addEventListener工作

function wordsChange() { 
if (window.addEventListener) { 
    document.getElementById('word_number').addEventListener('change', wordsK, false); 
} else { 
    document.getElementById('word_number').attachEvent('onchange', wordsK); 
}} 

function wordsK(){ 
alert('im reading');} 

的wordsChange函数被调用,但它不触发wordsK功能。我不知道我在做坏事,和欣赏任何建议。

对不起对于 缺乏信息。我试着去使用从docksoft_stat插件CKEDITOR,显示在底部有一个字计数器的输出。 我需要这个信息才能正常运作。 谢谢大家对所有的快速解答。

+1

使用keydown/keyup事件而不是更改。 – jrath

+0

由于您的代码目前是'wordK',因此应该只在'#word_number'更改后执行。当'wordsChange'运行时,你希望它执行吗? – Inkbug

+0

我希望它在#word_number更改时执行,并且它不是textarea,它是编辑器的输出。 (即时通讯使用CKEditor,编号来自插件,显示编辑页脚上的文字编号) – eidan

假设:您正在使用<textarea>According to https://developer.mozilla.org/en-US/docs/Web/Events/change当您键入<textarea>-字段时,更改事件不会被触发。只有当您点击其他地方时才会被触发,但只有<textarea>

正如jrath建议的那样,改用​​-event。每次在textare-element具有焦点的情况下按下键时,都会触发此按钮。

使用keyup事件可能不总是有效。可能出现的情况:通过点击textarea,然后按下一个键(将触发​​),然后在按住键的同时单击textarea以外的某个位置,然后松开该键。 keyup事件将不会被解雇,因为textarea字段已通过点击其他地方而失去焦点。

+0

正如我之前说的,它不是一个textarea字段,它的输出是编辑器。 (即时使用CKEditor和编号是从一个插件,显示在编辑器的页脚编号)。 – eidan

+0

“输出”是什么意思?那么什么样的元素是'word_number'?为该元素配置了哪些事件? – Zim84

+0

刚刚编辑我的问题解释更好的问题。感谢你的回答。 – eidan

你没有打电话给你的wordsChange()函数anywhare。请尝试以下代码:

'function wordsChange() { 
if (window.addEventListener) { 
document.getElementById('word_number').addEventListener('change', wordsK, false);} else { 
document.getElementById('word_number').attachEvent('onchange', wordsK);} 
} 

function wordsK(){alert('im reading');} 
// add below line to your code; 
wordsChange(); 

它会工作;

由于

+0

words将其从另一个函数中调用,等待编辑器(CKEditor)加载。 – eidan

+0

CKEditor是否通过ajax调用加载?以及正在编辑哪个字段以及哪个字段正在更新任何更改? 可以请发布完整的代码,以便我可以尝试复制该问题。 – Vasimkhan

+0

刚刚编辑我的问题解释更好的问题。感谢你的回答。 – eidan

的document.getElementById( 'word_number')的addEventListener( '变更',wordsK,假)。

这只会在文本框聚焦时触发。

你可以尝试绑定'keypress'或'keyup'或'keydown'事件,否则使用jQuery绑定一个事件,如下所示 $(document.getElementById('word_number'))。on(“input”,wordsK );

这可能是解决CKEditor的

Detecting onChange events from a CKEditor using Jquery

+0

非常感谢。我可以用其他方法解决这个问题。即时通讯完成后,我会让你知道。 – eidan

有用!

我只是找到一个替代解决方案的问题。正如我不能阅读改变事件word_number的价值我安装了@Alfonso(格拉西亚斯!)平变化插件的CKEDITOR并用于触发我的功能:

function wordsChange() { 
for (var i in CKEDITOR.instances) { 
CKEDITOR.instances[i].on('change', function() { 
    alert('text changed!'); 
}); 
}} 

它的工作原理ferfectly,现在我可以做我想做的事情。 再次感谢您的帮助!