javascript-输入问题上的textarea
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-输入问题上的textarea,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2334字,纯文字阅读大概需要4分钟。
内容图文
我有一个textarea,我想从键盘或鼠标/编辑菜单中捕获必要的事件.现在,当用户复制通过CTRL-V在文本区域中粘贴文本时,无论是在keydown还是粘贴时,都会调用processUserInput两次,这由于各种原因是不希望的.
我以这种方式“解决”了它:
var IsProcessingEvent = false;
$("#textarea").on('click keydown cut paste', processUserInput);
function processUserInput(e) {
if(!IsProcessingEvent) {
IsProcessingEvent = true;
// do the actual processing of user input
IsProcessingEvent = false;
}
}
我想知道是否有一个更优雅的解决方案.
p.s onpaste事件是必需的,因为用户可以通过鼠标右键单击或通过浏览器编辑菜单复制粘贴文本.
提前致谢!
解决方法:
您在做正确的事情,伙计.如果您更改按键的按键状态会更好,但是如果您愿意,可以使代码时尚:
var isProcessingEvent = false;
$("#textarea").on('click keypress cut paste', processUserInput);
function processUserInput(e) {
// Is processing event, so stop here.
if(isProcessingEvent) {
return;
}
isProcessingEvent = true;
// do the actual processing of user input
isProcessingEvent = false;
}
但是,如果我愿意,我将使用一个约定来处理您的用户输入,这样您就无法在等待过程时冻结所有UI线程.
将是这样的:
$("#textarea").on('click keypress cut paste', processUserInput);
function processUserInput(e) {
// Is processing event, so stop here.
if(processUserInput.working) {
// The user trigger the event while it was processing
processUserInput.doAgain = {
// save context
ctx: this,
// save event
e: e
};
return;
}
processUserInput.working = true;
function finished() {
processUserInput.working = false;
// The process finished but has new changes in the textfield so...
var lastEvent = processUserInput.doAgain;
if (lastEvent) {
processUserInput.doAgain = null;
// Process this guy again
setTimeout(processUserInput.bind(lastEvent.ctx), 0, lastEvent.e);
}
}
function theProcess(e, cb) {
// do my async stuff here
// Unfreeze the click/keydown/cut/past events in the textarea
if (typeof cb === 'function') {
cb();
}
}
setTimeout(theProcess.bind(this), 0, e, finished);
}
这是异步的示例,但是您可以使用异步ajax或网络工作者来处理事件,这样就不会冻结UI线程.
PS .:超时不会阻止UI线程冻结,它只会将您的进程放在执行队列的末尾.
另一个提示!
如果您正在处理文本区域中的文本,最好使用keypress而不是keydown,因为如果您在keydown中获得了textarea值,则不会更改,但是keypress将获得您所按的键更改的值.
http://www.quirksmode.org/dom/events/keys.html
当然,如果您仍然想使用keydown,则可以使用我在示例中进行的setTimeout来推迟处理.
内容总结
以上是互联网集市为您收集整理的javascript-输入问题上的textarea全部内容,希望文章能够帮你解决javascript-输入问题上的textarea所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。