我如何检测 jQueryUI 中自动完成项目的 blur/unfocus?
How do i detect blur/unfocus on autocomplete items in jQueryUI?
我在 jQueryUI 中使用自动完成小部件,现在尝试对其进行一些自定义。
我想以自定义方式突出显示自动完成列表中悬停的项目。在下面的示例代码中,我使用 focus
事件将字体更改为粗体并查找所选元素,最后修改该元素的样式。
在将悬停的项目更改为粗体之前,我确保将所有其他项目重置为正常字体(否则,当悬停在下一个项目上时,前一个项目将保持粗体)。
它部分有效,但我不喜欢我的解决方案(我觉得它有点“丑陋”)。一个问题是,如果我将鼠标指针移到列表之外,它不会检测到它,并且最后一项将保持为粗体。见图:
我被困在这里了...如何以更好的方式检测模糊事件并从最后悬停的项目中删除粗体?这是我的示例代码:
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<script src="https://code.jquery.com/ui/1.13.0/jquery-ui.js"></script>
<script>
$( 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,
focus: function( event, ui ) {
// Reset all list item fonts
$(".ui-menu-item-wrapper").css("font-weight", "normal");
// Find the element selected and make it bold
selector = ".ui-menu-item-wrapper:contains(" + ui.item.label +")";
$(selector).css("font-weight", "bold");
},
});
});
</script>
</head>
<body>
<div class="ui-widget">
<label for="tags">Tags: </label>
<input id="tags">
</div>
</body>
</html>
考虑以下 CSS 示例。
$(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
});
});
.ui-autocomplete .ui-menu-item .ui-state-active {
font-weight: bold;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<script src="https://code.jquery.com/ui/1.13.0/jquery-ui.js"></script>
<div class="ui-widget">
<label for="tags">Tags: </label>
<input id="tags">
</div>
自动完成使用菜单,而菜单对项目使用 ui-state-active
。使用正确的 CSS 选择器,您可以将突出显示的项目设为粗体。
我在 jQueryUI 中使用自动完成小部件,现在尝试对其进行一些自定义。
我想以自定义方式突出显示自动完成列表中悬停的项目。在下面的示例代码中,我使用 focus
事件将字体更改为粗体并查找所选元素,最后修改该元素的样式。
在将悬停的项目更改为粗体之前,我确保将所有其他项目重置为正常字体(否则,当悬停在下一个项目上时,前一个项目将保持粗体)。
它部分有效,但我不喜欢我的解决方案(我觉得它有点“丑陋”)。一个问题是,如果我将鼠标指针移到列表之外,它不会检测到它,并且最后一项将保持为粗体。见图:
我被困在这里了...如何以更好的方式检测模糊事件并从最后悬停的项目中删除粗体?这是我的示例代码:
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<script src="https://code.jquery.com/ui/1.13.0/jquery-ui.js"></script>
<script>
$( 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,
focus: function( event, ui ) {
// Reset all list item fonts
$(".ui-menu-item-wrapper").css("font-weight", "normal");
// Find the element selected and make it bold
selector = ".ui-menu-item-wrapper:contains(" + ui.item.label +")";
$(selector).css("font-weight", "bold");
},
});
});
</script>
</head>
<body>
<div class="ui-widget">
<label for="tags">Tags: </label>
<input id="tags">
</div>
</body>
</html>
考虑以下 CSS 示例。
$(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
});
});
.ui-autocomplete .ui-menu-item .ui-state-active {
font-weight: bold;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<script src="https://code.jquery.com/ui/1.13.0/jquery-ui.js"></script>
<div class="ui-widget">
<label for="tags">Tags: </label>
<input id="tags">
</div>
自动完成使用菜单,而菜单对项目使用 ui-state-active
。使用正确的 CSS 选择器,您可以将突出显示的项目设为粗体。