简体   繁体   English

无法在 Javascript 中注册 keyup 事件

[英]Can't register keyup event in Javascript

I'm trying to implement a markdown editor similar to the one on Stackoverflow.我正在尝试实现类似于 Stackoverflow 上的 markdown 编辑器。 I'm using SimpleMDE.我正在使用 SimpleMDE。

I have written the code below, but for some reason the 'keyup' event is not registering.我已经编写了下面的代码,但由于某种原因,'keyup' 事件没有注册。 Everything else works.其他一切都有效。

The key javascript part is here:关键的 javascript 部分在这里:

var input = document.getElementById('editable')
input.addEventListener('keyup', function(){
    console.log(simplemde.value())
    document.getElementById("content").innerHTML = simplemde.value()
})

The entire code looks like this:整个代码如下所示:

 var simplemde = new SimpleMDE({ element: document.getElementById("editable") }) simplemde.value("This text will appear in the editor") var input = document.getElementById('editable') input.addEventListener('keyup', function() { console.log(simplemde.value()) document.getElementById("content").innerHTML = simplemde.value() })
 .editor { width: 45%; float: left; }.content { width: 45%; float: left; }
 <link rel="stylesheet" href="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css"> <script src="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.js"></script> <div class="editor"> <textarea id="editable"></textarea> </div> <div class="content" id="content"></div>

The issue is because you've hooked your event handler to the original #editable element.问题是因为您已将事件处理程序连接到原始#editable元素。 This element is no longer in control of the content, it's all handled by the elements created by SimpleMDE to build its UI.此元素不再控制内容,它全部由 SimpleMDE 创建的元素处理以构建其 UI。

To do what you require you should instead use the on() method of the codemirror property which SMDE exposes.要执行您需要的操作,您应该改用 SMDE 公开的codemirror属性的on()方法。 A list of the available events is available from their documentation .可用事件的列表可从其文档中获得。

 var simplemde = new SimpleMDE({ element: document.querySelector("#editable"), initialValue: "This text will appear in the editor" }); simplemde.codemirror.on('keyup', function() { document.querySelector('#content').innerHTML = simplemde.value(); })
 .editor { width: 45%; float: left; }.content { width: 45%; float: left; }
 <link rel="stylesheet" href="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css"> <script src="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.js"></script> <div class="editor"> <textarea id="editable"></textarea> </div> <div class="content" id="content"></div>

Note, I'd suggest using the input or change events instead of keyup , as the latter doesn't fire if the user holds the key down, which can look odd.请注意,我建议使用inputchange事件而不是keyup ,因为如果用户按住键,后者不会触发,这看起来很奇怪。

There's a special method you use (SMDE uses codemirror):您使用了一种特殊方法(SMDE 使用 codemirror):

simplemde.codemirror.on('keyup', function(){
  content.textContent = simplemde.value();
});

 var simplemde = new SimpleMDE({ element: document.getElementById('editable') }) simplemde.value('This text will appear in the editor') const content = document.querySelector('#content'); content.textContent = simplemde.value(); simplemde.codemirror.on('keyup', function(){ content.textContent = simplemde.value(); });
 .editor { width: 45%; float: left; }.content { width: 45%; float: left; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/simplemde/1.11.2/simplemde.min.js"></script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css"> <script src="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.js"></script> <div class="editor"> <textarea id="editable"></textarea> </div> <div class="content" id="content"></div>

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

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