gpt4 book ai didi

javascript - jQueryUI 自动完成在目标输入字段中显示值而不是标签

转载 作者:行者123 更新时间:2023-12-03 01:15:30 25 4
gpt4 key购买 nike

我正在从本地数组提供 jQuery UI 自动完成功能,如下所示:

var articleCategories = [
{
label: "Technical",
value: 1
},
...
];

我希望控件能够仅显示建议框中的标签(它确实这样做了),并且也仅显示目标输入字段中所选项目的标签,在我的例子中,这是一个 idtxtCategory 的文本框。

function displaySelectedCategoryLabel(event, ui) {
$("#txtCategory").val(ui.item.label);
$("#hidSelectedCategoryId").val(ui.item.value);
};

var autoComplete = $("#txtCategory").autocomplete({
source: articleCategories,
classes: ...,
position: ...,
focus: function (event, ui) {
$("#txtCategory").val(ui.item.label);
},
select: function (event, ui) {
displaySelectedCategoryLabel(event, ui);
},
change: function (event, ui) {
displaySelectedCategoryLabel(event, ui);
}
});

因此,我为所有三个事件提供了重写:focusselectchange 事件。当我在调试器中单步执行时,我看到它们的行为都与我预期的一样,除了一个小偏差,如下所述。

发生的情况是这样的:

  1. 当我通过将鼠标悬停在建议框中的项目上来更改焦点时,focus 事件正常工作,在目标输入中显示标签领域。

  2. 但是,如果我使用键盘按键导航建议框中的项目,则只有出现在目标输入字段中。我是否还需要覆盖 keypresskeyupkeydown 事件?但是哪个控件呢,因为建议框是动态创建的。

  3. 当我从建议框中选择一个条目时,目标输入字段会显示服从我的处理程序的标签,但只是简单地显示,如上所述。只要我留在目标控件内,它很快就会变回显示

  4. 正如预期的那样,一旦我将焦点从目标控件移到外部,就会发生更改事件,并且目标输入字段开始按照我的处理程序显示标签

发生什么事了?我是否缺少事件处理程序?

演示

Here is a working demo这就说明了问题。请下载名为 TestJQueryUIAutoComplete 的整个文件夹,因为它包含 jQueryUI javascript 文件和 CSS 文件。如果您已经拥有这些 CSS 和 JS 文件,则只需下载 TestJQueryUIAutoComplete.html 文件。

最佳答案

看起来焦点被触发了两次,在其覆盖版本和默认版本中,将值放入自动完成框中。

在焦点和displaySelectedCategoryLabel上添加preventDefault()似乎可以解决问题,而我仍在调查它为什么会这样。

<html>
<head>
<link rel = "stylehseet" type = "text/css" href = "https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.css" />
<link rel = "stylehseet" type = "text/css" href = "https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.structure.css" />
<link rel = "stylehseet" type = "text/css" href = "https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.theme.css" />
<style>
#txtCategory {
width: 400px;
height: 50px;
border: 2px solid red;
padding-left: 20px;
font-size: 20px;
}

.myCustomClass {
font-size: 40px;
font-family: "Georgia";
list-style-type: none;
background-color: blue;
color: white;
}
</style>
<meta charset="utf-8"
</head>

<body>
<input id = "txtCategory" />
<input id = "hidSelectedCategoryId" type = "hidden" />

<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.min.js"></script>
<script>
$(function() {

var articleCategories = [
{
label: "Technical",
value: 1
},
{
label: "Non-Technical",
value: 2
},
{
label: "External Publications",
value: 3
},
{
label: "Books",
value: 4
},
{
label: "Movies",
value: 5
}
];
function displaySelectedCategoryLabel(event, ui) {
$("#txtCategory").val(ui.item.label);
$("#hidSelectedCategoryId").val(ui.item.value);
event.preventDefault();
};
var autoComplete = $("#txtCategory").autocomplete({
source: articleCategories,
classes: {
"ui-autocomplete": "myCustomClass"
},
position: {
my: "left top",
at: "left bottom",
of: "#txtCategory",
collision: "fit"
},
focus: function (event, ui) {
$("#txtCategory").val(ui.item.label);
event.preventDefault();
},
select: function (event, ui) {
displaySelectedCategoryLabel(event, ui);
},
change: function (event, ui) {
displaySelectedCategoryLabel(event, ui);
}
});
});
</script>
</body>

关于javascript - jQueryUI 自动完成在目标输入字段中显示值而不是标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52033227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com