我有一个 jquery 自动完成功能,它什么也没做。我使用了 here. 中的代码它在他们的示例中有效。
有一些变化...首先,数组是从 viewModelList 创建的,它可以工作。这是它的一小部分:
var suburbs = [
{
id: "17023",
suburb: "Epsom",
postCode: "3551",
state: "VIC"
},
{
id: "17024",
suburb: "Muskerry",
postCode: "3557",
state: "VIC"
}
我已努力使用消息来指示响应 - 它是什么但即使消息也不起作用...我什至无法获得响应值..
我在消息的表单下方创建了一个 div,它们已经使用点击功能进行了测试。我确实在“#Suburbs”ID 上尝试了“.change”功能,但也一无所获。
代码如下:
<script>
(function ($) {
$(function () {
var suburbs = [
@for (var i = 0; i < Model.SuburbAndPostcodesList.Count; i++) {
<text>{
id: "@Model.SuburbAndPostcodesList[i].SuburbsAndPostcodesId",
suburb: "@Model.SuburbAndPostcodesList[i].Suburb",
postCode: "@Model.SuburbAndPostcodesList[i].PostCode",
state: "@Model.SuburbAndPostcodesList[i].State.ShortName"
}@(i == Model.SuburbAndPostcodesList.Count - 1 ? "" : ",")</text>
}
];
$("#Suburb").autocomplete({
source: function (req, responseFn) {
addMessage("search on: '" + req.term + "'<br/>");
var re = $.ui.autocomplete.escapeRegex(req.term);
var matcher = new RegExp("^" + re, "i");
var a = $.grep(suburbs, function (item , index) {
//addMessage(" sniffing: '" + item + "'<br/>");
return matcher.test(item.suburb);
});
addMessage("Result: " + a.length + " items<br/>");
responseFn(a);
},
select: function (value, data) {
if (typeof data == "undefined") {
addMessage('You selected: ' + value + "<br/>");
} else {
addMessage('You selected: ' + data.item.value + "<br/>");
}
}
});
function addMessage(msg) {
$('#msgs').append(msg);
}
});
});
</script>
ID“#Suburb”是正确的,适用于简单版本的 .autocomplete。
编辑:这是 javascript 的页面代码。希望这就是您想要的。
<script src="/lib/jquery/dist/jquery.js"></script>
<script src="/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="/js/site.js?v=EWaMeWsJBYWmL2g_KkgXZQ5nPe-a3Ichp0LEgzXczKo"></script>
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
<script src="/lib/jquery-ui/jquery-ui.js"></script>
<script>
(function ($) {
$(function () {
var suburbs = [
{
id: "17023",
suburb: "Epsom",
postCode: "3551",
state: "VIC"
},
{
id: "17024",
suburb: "Muskerry",
postCode: "3557",
state: "VIC"
},
...
{
id: "17055",
suburb: "Bonnet Hill",
postCode: "7053",
state: "TAS"
},
{
id: "17056",
suburb: "Wellington Park",
postCode: "7054",
state: "TAS"
}
];
$("#Suburb").autocomplete({
source: function (req, responseFn) {
addMessage("search on: '" + req.term + "'<br/>");
var re = $.ui.autocomplete.escapeRegex(req.term);
var matcher = new RegExp("^" + re, "i");
var a = $.grep(suburbs, function (item , index) {
//addMessage(" sniffing: '" + item + "'<br/>");
return matcher.test(item.suburb);
});
addMessage("Result: " + a.length + " items<br/>");
responseFn(a);
},
select: function (value, data) {
if (typeof data == "undefined") {
addMessage('You selected: ' + value + "<br/>");
} else {
addMessage('You selected: ' + data.item.value + "<br/>");
}
}
});
function addMessage(msg) {
$('#msgs').append(msg);
}
});
});
</script>
EDIT2:这是 div 元素“suburb”,因为我认为查看自动完成功能可能是个好主意。
<div class="form-group">
<label class="col-md-2 control-label" for="Suburb">Suburb:</label>
<div class="col-md-10">
<input class="form-control" type="text" data-val="true" data-val-required="A suburb name is required" id="Suburb" name="Suburb" value="Eaglehawk" />
<span class="text-danger field-validation-valid" data-valmsg-for="Suburb" data-valmsg-replace="true" />
</div>
</div>
最佳答案
好的,有几件事:
首先:您的 jQuery .ready()
函数根本没有运行。您正在结合几种速记和高级技术,但它们不起作用。 (在下面的评论中有更多详细信息)在您可以做一些研究并记下概念之前,最好使用手写方法,然后就可以了
$(document).ready(function() {
});
其次:当您执行 $('#Suburb')
时,这意味着您必须在文档中的某个位置有一个带有 id="Suburb"
的元素。你的输入没有那个。
第三:您要返回的a
数组是您的自动完成无法识别的对象数组。您要么需要返回字符串数组,要么返回以下格式的对象数组:{ label: "Choice1", value: "value1"}
。完成此操作的最简单方法是将 .map
添加到您现有的代码中,紧跟在 .grep
之后:
source: function (req, responseFn) {
addMessage("search on: '" + req.term + "'<br/>");
var re = $.ui.autocomplete.escapeRegex(req.term);
var matcher = new RegExp("^" + re, "i");
var a = $.grep(suburbs, function (item , index) {
return matcher.test(item.suburb);
});
a = $.map(a, function(x){
return x.suburb;
});
addMessage("Result: " + a.length + " items<br/>");
responseFn(a);
},
话虽如此,我已经对您的代码进行了一些修改(做出一些假设),这是一个有效的 fiddle .抱歉,当你添加你的 fiddle 时,我已经开始制作我自己的 fiddle 了。继续使用我创建的 fiddle 比修改你的 fiddle 更容易。
关于javascript - Jquery .autocomplete 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36530780/