在我的最后一个问题中,结果证明 typeahead.js 可能是用 ajax 更新的 typeahead 自动完成建议不起作用。在引导标签输入上有一些示例,因此基于我的第一个问题和示例中的一些代码,我得出了以下代码。例如,当我键入时,s
我会得到带有下拉菜单的自动建议,Sandra
但是当我单击它时,我每次都会收到此错误:
Uncaught TypeError: (str || "").replace is not a function
测试.html
<html lang="en">
<head>
<meta charset="utf-8"/>
<link rel="stylesheet" href="/static/bootstrap.min.css">
<link rel="stylesheet" href="/static/bootstrap-theme.min.css">
<link rel="stylesheet" href="/static/bootstrap-tagsinput.css">
</head>
<body>
<input type="text" data-role="tagsinput" >
<script src="../static/jquery.min.js"></script>
<script src="../static/bootstrap.min.js"></script>
<script src="../static/typeahead.bundle.js"></script>
<script src="../static/bootstrap-tagsinput.js"></script>
<script>
var citynames = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '/test/?query=*',
wildcard: '*',
filter: function(x) {
return $.map(x, function(item) {
console.log(item) //["Sandra"]
return {name: item};
});
},
},
});
citynames.initialize();
$('input').tagsinput({
itemValue: 'name',
typeaheadjs: {
name: 'citynames',
displayKey: 'name',
source: citynames.ttAdapter()
}
});
</script>
</body>
</html>
应用程序.py
from flask import Flask, render_template, url_for, jsonify, request
app = Flask(__name__)
@app.route('/', methods=['GET','POST'])
def index():
return render_template('test.html')
@app.route('/test/', methods=['GET', 'POST'])
def test():
names = ["John","Jane", "Sandra", "Xerox"]
query = request.args.get('query')
return jsonify(options=[name for name in names if query.lower() in name.lower()])
if __name__ == '__main__':
app.run(debug = True)