gpt4 book ai didi

javascript - 使用 Bootstrap 3 和 Twitter typeahead.js 进行自动完成

转载 作者:可可西里 更新时间:2023-11-01 07:32:55 26 4
gpt4 key购买 nike

到目前为止,我已经尝试使用 Bootstrap 3 和 twitter typeahead.js 自动完成,但没有成功。具体来说,我试图允许搜索学生的 MySQL 数据库。当用户从自动建议结果中选择学生时,除了姓名之外,我还需要其他数据,在本例中是他们的 ID。以下是返回的一些示例 JSON:

[{"firstname":"Tyler","lastname":"Smith","id":"33"},
{"firstname":"Tyler","lastname":"Wilson","id":"190"},
{"firstname":"Tyler","lastname":"Doe","id":"347"},
{"firstname":"Tyler","lastname":"Carson","id":"377"}]

我找到了这段代码,它适用于仅包含名称的平面数组,因此上面的代码不起作用:

    $('#studentFName').typeahead({
name: 'FNameSearch',
remote: 'students?query=%QUERY',
updater: function(item) {
return item;
}
})

但是我需要的不仅仅是名字,我需要能够获取数据以及名称并将其附加到结果 div。我已经在 jquery UI 中完成了这个,我只是无法让它与 typeahead.js 一起工作。

非常感谢您的帮助。

最佳答案

如果您使用的是最新版本的 Twitter Typeahead.js (0.10.2),这里有一个可能适合您的更新方法 (new demo)。

使用这个 HTML

<table>
<tr>
<td rowspan="3"><input name='students' type="text" placeholder="Students" /></td>
<td>First Name:</td>
<td><input name='FName' type="text" readonly="readonly" /></td>
</tr>
<tr>
<td>Last Name:</td>
<td><input name='LName' type="text" readonly="readonly" /></td>
</tr>
<tr>
<td>ID:</td>
<td><input name='ID' type="text" readonly="readonly" /></td>
</tr>
</table>

还有这个 JavaScript(我使用本地方法来避免设置模拟 AJAX 服务,尽管这也适用于远程数据源方法)

var substringMatcher = function(strs) {
return function findMatches(q, cb) {
var matches, substringRegex;
// an array that will be populated with substring matches
matches = [];
// regex used to determine if a string contains the substring `q`
substrRegex = new RegExp(q, 'i');
// iterate through the pool of strings and for any string that
// contains the substring `q`, add it to the `matches` array
$.each(strs, function(i, str) {
if (substrRegex.test(str['value'])) {
// the typeahead jQuery plugin expects suggestions to a
// JavaScript object, refer to typeahead docs for more info
matches.push(str);
}
});
cb(matches);
};
};
var students = [{
"value": "Tyler Smith",
"firstname": "Tyler",
"lastname": "Smith",
"id": "33"
}, {
"value": "Tyler Wilson",
"firstname": "Tyler",
"lastname": "Wilson",
"id": "190"
}, {
"value": "Tyler Doe",
"firstname": "Tyler",
"lastname": "Doe",
"id": "347"
}, {
"value": "Tyler Carson",
"firstname": "Tyler",
"lastname": "Carson",
"id": "377"
}];

$('input[name=students]').typeahead({
hint: true,
highlight: true,
minLength: 1
},{
name: 'Students',
displayKey: 'value',
source: substringMatcher(students)
}).on('typeahead:selected', function (object, datum) {
// Example: {type: "typeahead:selected", timeStamp: 1377890016108, jQuery203017338529066182673: true, isTrigger: 3, namespace: ""...}
//console.log(object);

// Datum containg value, tokens, and custom properties
$('input[name=FName]').val(datum.firstname);
$('input[name=LName]').val(datum.lastname);
$('input[name=ID]').val(datum.id);
});

如果您使用的是 Twitter 的 Typeahead.js pre 0.10.2 那么这里有一种方法可能适合您(old demo 这指向缺少的 typeahead.js 副本,但我保留了如果它仍然有用的话):

使用相同的 HTML

还有这个 JavaScript(我使用本地方法来避免设置模拟 AJAX 服务,尽管这也适用于远程数据源方法)

$('input[name=students]').typeahead({
name: 'Students',
local: [{
"value": "Tyler Smith",
"firstname": "Tyler",
"lastname": "Smith",
"id": "33"
}, {
"value": "Tyler Wilson",
"firstname": "Tyler",
"lastname": "Wilson",
"id": "190"
}, {
"value": "Tyler Doe",
"firstname": "Tyler",
"lastname": "Doe",
"id": "347"
}, {
"value": "Tyler Carson",
"firstname": "Tyler",
"lastname": "Carson",
"id": "377"
}]
}).on('typeahead:selected', function (object, datum) {
// Example: {type: "typeahead:selected", timeStamp: 1377890016108, jQuery203017338529066182673: true, isTrigger: 3, namespace: ""...}
//console.log(object);

// Datum containg value, tokens, and custom properties
$('input[name=FName]').val(datum.firstname);
$('input[name=LName]').val(datum.lastname);
$('input[name=ID]').val(datum.id);
});

您需要对数据进行的唯一更改是添加一个 value 属性,该属性代表将在自动完成框中直观显示的内容。如您所见,您可以自由保留所有单独的数据元素(甚至名称相同),为了突出显示使用它们的方法,我添加了一个额外的“详细信息表单”,该表单会在选择时更新。

关于javascript - 使用 Bootstrap 3 和 Twitter typeahead.js 进行自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21000529/

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