- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力扩展 jQuery 自动完成功能,以便特定项目默认具有焦点。开箱即用的功能运行得很好,但并不完美。使用 autoFocus
选项,我可以自动聚焦于第一个项目。
$( "#input" ).autocomplete({
source: "autocomplete.php",
minLength: 1,
autoFocus: true
});
但是,我希望更好地控制重点关注的项目。如果用户输入“eng”并且我的源返回的相关项目是:
我希望第三个项目,英语,默认成为焦点(即实际上以用户输入开始的项目,即使我想显示其他结果)。理想情况下,我的源代码 - autocomplete.php - 将能够指示哪个项目是默认焦点。
有什么想法吗?我什至不知道如何开始。
最佳答案
有一个简单的方法可以实现这一点,利用 open
事件。您可以让客户端代码处理选择默认项目,或发送包含您想要选择的项目的额外属性。我将详细介绍这两个选项:
$("input").autocomplete({
source: /* ... */,
open: function (event, ui) {
var menu = $(this).data("uiAutocomplete").menu
, i = 0
, $items = $('li', menu.element)
, item
, text
, startsWith = new RegExp("^" + this.value, "i");
for (; i < $items.length && !item; i++) {
text = $items.eq(i).text();
if (startsWith.test(text)) {
item = $items.eq(i);
}
}
if (item) {
menu.focus(null, item);
}
}
});
基本上,想法是在自动完成菜单打开时执行以下操作:
focus
菜单上的方法来突出显示该项目。示例: http://jsfiddle.net/J5rVP/40/ (尝试搜索English 或Scots English)
该代码使用本地数据源,但它应该与远程数据源一样工作。
<小时/>扩展上面的示例,您可以调整向下发送数据的方式,以便在每次搜索时您的服务器端代码决定选择哪个项目。您可以通过简单地为您希望选择的项目指定一个附加属性来完成此操作。例如,您的 JSON 响应可能如下所示:
[{"label":"American English","select":true},{"label":"British English"},{"label":"English"},{"label":"Scots English"}]
请注意“美式英语”上的select
属性。这表示自动完成我们希望默认选择该项目。
然后您将更新您的小部件初始化代码以利用上面的 open
事件。这次我们只是搜索具有 select
属性的项目:
$("input").autocomplete({
source: "autocomplete.php",
open: function (event, ui) {
var menu = $(this).data("uiAutocomplete").menu,
i = 0,
$items = $('li', menu.element),
item,
data;
for (; i < $items.length && !item; i++) {
data = $items.eq(i).data("ui-autocomplete-item");
if (data.select) {
item = $items.eq(i);
}
}
if (item) {
menu.focus(null, item);
}
}
});
示例: http://jsfiddle.net/J5rVP/42/
请注意,在上面的示例中,始终选择美国英语。由于每次用户键入时自动完成功能都会发出新的请求,因此您的服务器将使用不同的建议数据进行响应,从而响应不同的选定项目。
此外,我不了解 PHP,因此无法说明如何将 select
属性添加到 JSON。不过看起来似乎非常简单,甚至可能看起来像第一个使用正则表达式的示例中的 JavaScript 代码。
关于jquery - 关注 jQuery 自动完成结果(不一定是第一个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14572817/
众所周知,jQuery 的 $.post 函数非常棒,但我遇到的问题是查看页面源代码的人可以查看数据的去向,从而移向该页面进行窥探,或者,上帝禁止找到保存所有内容的文件夹。所以我的问题是,谁知道如何隐
我在下面有这个程序,它执行简单的关注/取消关注功能。一切都很好,除了当我刷新页面时,只有行中的第一个用户保留正确的关注/取消关注按钮。示例 我可以关注 user1 user2 和 user3,但是当我
我想要创建的是一个关注者/关注系统,您不是简单地关注用户,而是关注他们共享的内容部分。几乎就好像您关注的是 Twitter 的“列表”或群组而不是人员。不过,有了这个,您就可以关注/取消关注用户共享的
这个问题已经有答案了: facebook social plug-in not showing up when added dynamically (2 个回答) 已关闭 7 年前。 使用 HTML
我正在构建一个编辑器,它使用 TImage 来显示图片,并具有鼠标事件来能够在图像上绘制、移动框和调整框大小。这一切都很完美。现在我正在尝试实现使用键盘上的箭头移动选定框的功能,但是A)TImage没
我有两个问题,请记住我是一个java新手1.我有一个使用 JFrame 创建 GUI 的类。JFrame 有 2 个面板,我使用 JSplitPane 添加了 问题是我可以设法将焦点设置在所需的 JP
我目前正在使用iOS应用程序进行开发,该应用程序会从流式API捕获一些推文。因此,我使用用户名和密码进行身份验证。除此之外,我想给用户提供在Twitter上关注某些人的机会。我创建了一个UIButto
有没有办法钩入Play evolutions framework这样当它成功从 n.sql 迁移时至 n+1.sql至 n+2.sql ...,它在 Play 应用程序中调用了一些成功后 Hook (
我的 gorm 中有文本模式为多行的文本框。我必须通过 jQuery 将 css 应用到该文本框。为此,我使用了以下脚本。 $(document).ready(function() {
我在强制关注动态生成的 JQuery 对话框内容中的文本字段时遇到问题。我已经在 google 上搜索过这一点,似乎如果 Jquery 对话框设置为模式,JQuery 将“窃取”文档级别的焦点。老实说
下午,我正在使用 PHP、HTML5 和 Bootstrap。我构建了一个分为 5 个选项卡的表单,该表单中有几个必填字段。所有必需的输入字段都是“文本”,并且还标有 required="requir
我创建了一个带有 GridView 的 WPF 页面。在 GridView 中,每行有 5 个可用的 TextBox。当我在第一行的第一个 TextBox 上输入数据,然后按 Tab 键时,焦点移动到
请给我Java中密码验证的正则表达式代码,它应该由一个大写字符、一个整数、一个后面的符号(@、#、$、%、^、&、+、=)和小字符组成。 我一直在尝试使用不同的独立正则表达式和一个组合的正则表达式。
我想在我的 mean-stack 网页上添加一个 Twitter 的关注按钮。我使用以下代码: https://jsbin.com/herikik/3/edit?html,output 在 Ma
在下添加如下代码后到我在 Tumblr 上的主题 .tail { position:fixed; bottom:0px; right:0px; margin-bottom:434px; margin-
我必须从 Angular 应用程序启动一系列窗口。我希望能够让用户单击主页上的按钮以使该窗口重新成为焦点。通常我会在 javascript 中使用类似以下内容来执行此操作: //Launch the
因此,我想显示一些用 AND 或 OR 连接的规则,并且我想为 AND 或 OR 添加颜色,如红色、绿色等。 Fruit = Apple AND Market = SuperMarket1 那么我应该
我正在开发 Windows 商店应用程序,我正在使用 ListView 控件动态添加数据。这些项目被添加到列表的末尾。 Scrollbar 在添加更多数据时出现。我想用底部的滚动条以编程方式突出显示最
(问题仅在 Ubuntu 中出现。在 Windows 中工作正常。我不知道在其他 Linux 环境中) 我已经使用 ComponentListener 的方法在对话框中调用 JTextField 中的
如何将焦点放在时间选择器元素上?我正在开发电视应用程序,因此需要远程操作。所以我需要关注每个元素。TimePicker 有 3 个元素 - 小时列、分钟列和 AM/PM 列。 那么我如何才能专注于这
我是一名优秀的程序员,十分优秀!