jQuery UI自动完成更改事件不实时触发
问题描述:
使用jQuery UI时,我试图在#tag
输入的值发生改变时立即触发事件,但您可以看到如果用户单击页面上的内容并触发log
事件,不是一旦输入值发生变化jQuery UI自动完成更改事件不实时触发
我已经试图绑定更改事件paste
但我得到了同样的结果。
$(function() {
var availableTags = [
"ActionScript",
"AppleScript",
"Asp",
"BASIC",
"C",
"C++",
"Clojure",
"COBOL",
"ColdFusion",
"Erlang",
"Fortran",
"Groovy",
"Haskell",
"Java",
"JavaScript",
"Lisp",
"Perl",
"PHP",
"Python",
"Ruby",
"Scala",
"Scheme"
];
$("#tags").autocomplete({
source: availableTags
});
$("#tags").on('change', function(){
console.log($(this).val());
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="ui-widget">
<label for="tags">Tags: </label>
<input id="tags">
</div>
可以请你让我知道如何解决这一问题?
答
据我所知,Javascript正在按预期执行。输入值更改后,Change
事件才会触发。变化并不一定意味着价值变化的瞬间。更改意味着输入的值已被提交到不同的值。如果您想在每次执行操作时都发生某种情况,请使用输入事件。
$(function() {
var availableTags = [
"ActionScript",
"AppleScript",
"Asp",
"BASIC",
"C",
"C++",
"Clojure",
"COBOL",
"ColdFusion",
"Erlang",
"Fortran",
"Groovy",
"Haskell",
"Java",
"JavaScript",
"Lisp",
"Perl",
"PHP",
"Python",
"Ruby",
"Scala",
"Scheme"
];
$("#tags").autocomplete({
source: availableTags
});
$("#tags").on('input', function(){
console.log($(this).val());
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<label>Input:</label>
<input type='text' value='' id='tags'/>
+0
不错。每天学习新东西 - 在答案之前从未听说过“输入”事件! –
+0
我更喜欢'input'事件,因为它会在输入实际发生变化时触发。把它想象成“变化”事件,但实际上按照你预期的方式工作。当任何键被放弃时,'keyup'事件可以被触发,而任何键都有焦点。 – trevster344
每jQuery的文档:**注:如不属于任何正式规范的按键事件,使用时可以跨浏览器不同,遇到的实际问题,浏览器版本和平台。** - 我发现获得真正的跨浏览器一致性的唯一方法是使用'keyup'(甚至不包括'keydown')。 –