Keyup 事件处理程序显示性能低下
Keyup event handler shows slow performance
我的例子:
$(document).on('keyup', '[contenteditable=true]', function (e) {
let _this = $(this), text = _this.text();
if (text.length === 1) {
let span = $('<span>').text(text);
_this.html(span);
}
console.log(_this.html());
});
[contenteditable=true] {
border: 1px solid #ccc;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<div contenteditable="true"></div>
我的问题:如果我以正常速度在 div 中键入一些文本(超过 1 个字符),代码可以正常工作。但是,当我尝试快速键入文本时,没有 <span>
标记附加到 div.
我该如何解决?
您可以使用 input
事件,而不是它在您跟踪用户输入时更有效,请查看下面的示例:
$(document).on('input', '[contenteditable=true]', function (e) {
//Your logic
});
或者 keypress
如 所说:
$(document).on('keypress', '[contenteditable=true]', function (e) {
//Your logic
});
希望对您有所帮助。
$(document).on('input', '[contenteditable=true]', function (e) {
let _this = $(this), text = _this.text();
if (text.length === 1) {
let span = $('<span>').text(text);
_this.html(span);
}
console.log(_this.html());
});
[contenteditable=true] {
border: 1px solid #ccc;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<div contenteditable="true"></div>
我的例子:
$(document).on('keyup', '[contenteditable=true]', function (e) {
let _this = $(this), text = _this.text();
if (text.length === 1) {
let span = $('<span>').text(text);
_this.html(span);
}
console.log(_this.html());
});
[contenteditable=true] {
border: 1px solid #ccc;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<div contenteditable="true"></div>
我的问题:如果我以正常速度在 div 中键入一些文本(超过 1 个字符),代码可以正常工作。但是,当我尝试快速键入文本时,没有 <span>
标记附加到 div.
我该如何解决?
您可以使用 input
事件,而不是它在您跟踪用户输入时更有效,请查看下面的示例:
$(document).on('input', '[contenteditable=true]', function (e) {
//Your logic
});
或者 keypress
如
$(document).on('keypress', '[contenteditable=true]', function (e) {
//Your logic
});
希望对您有所帮助。
$(document).on('input', '[contenteditable=true]', function (e) {
let _this = $(this), text = _this.text();
if (text.length === 1) {
let span = $('<span>').text(text);
_this.html(span);
}
console.log(_this.html());
});
[contenteditable=true] {
border: 1px solid #ccc;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<div contenteditable="true"></div>