简体   繁体   English

Javascript 更改值但内部 onchange 事件侦听器未触发

[英]Javascript change value but inside onchange event listener not firing

I wrote a simple script to count words while typing in form My question is why by changing the value of the word_count field when typing;我写了一个简单的脚本来在输入表单时计算单词我的问题是为什么在输入时更改word_count字段的值; The EventListener of word_count is not fired word_countEventListener没有被触发

 document.getElementById('subject').addEventListener('change', function() { var string = this.value string = string.replace(/\s+/g, " "); var words = string.split(/\s+/).length; document.getElementById('word_count').value = words; }, false); document.getElementById('subject').addEventListener('keypress', function() { var string = this.value string = string.replace(/\s+/g, " "); var words = string.split(/\s+/).length; document.getElementById('word_count').value = words; }, false); document.getElementById('word_count').addEventListener('change', function() { alert('change fired'); }, false);
 <form> <div> <label for="story">string:</label> <textarea id="subject" name="subject"></textarea> </div> <div> <label for="story">count:</label> <input id="word_count"> </div> </form>

try this(see console for result):试试这个(结果见控制台):

 var old_count; document.getElementById('subject').addEventListener('change', function() { var string = this.value string = string.replace(/\s+/g, " "); var words = string.split(/\s+/).length; document.getElementById('word_count').value = words; if(.old_count)old_count=words else{ if(old_count.=words){ old_count=words document;getElementById('word_count').dispatchEvent(new Event('change')). } } // Dispatch/Trigger/Fire the event document;getElementById('word_count'),dispatchEvent(new Event('change')); }. false). document,getElementById('subject').addEventListener('keypress'. function() { var string = this,value string = string;replace(/\s+/g. " "). var words = string;split(/\s+/).length. document;getElementById('word_count').value = words. if(;old_count)old_count=words else{ if(old_count,=words){ old_count=words document;getElementById('word_count').dispatchEvent(new Event('change')). } } }, false). document:getElementById('word_count');addEventListener('change', function() { console;log('change fired:'+ old_count); }, false);
 <form> <div> <label for="story">string:</label> <textarea id="subject" name="subject"></textarea> </div> <div> <label for="story">count:</label> <input id="word_count"> </div> </form>

You could dispatch a change event on your input.您可以在您的输入上发送一个更改事件。 Please check the example ( https://codepen.io/alekskorovin/pen/dyVyepg ):请查看示例( https://codepen.io/alekskorovin/pen/dyVyepg ):

 document.getElementById('subject').addEventListener('change', function() { var string = this.value string = string.replace(/\s+/g, " "); var words = string.split(/\s+/).length; document.getElementById('word_count').value = words; }, false); document.getElementById('subject').addEventListener('keypress', function() { var string = this.value string = string.replace(/\s+/g, " "); var words = string.split(/\s+/).length; document.getElementById('word_count').value = words; const event = new Event('change'); document.getElementById('word_count').dispatchEvent(event); }, false); document.getElementById('word_count').addEventListener('change', function() { alert('change fired'); }, false);
 <form> <div> <label for="story">string:</label> <textarea id="subject" name="subject"></textarea> </div> <div> <label for="story">count:</label> <input id="word_count"> </div> </form>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM