我知道JQuery自动完成UI小部件已经存在许多问题,但这些都没有奏效。我只是根据提供的来源编写代码:http://jqueryui.com/autocomplete/ 这是我的JQuery代码:
<script type="text/javascript">
$(document.body).ready(function(){
$('#txtcity').keypress(function(){
$("#txtschool").removeAttr('disabled');
$("#txtschool").val('');
});
$('#txtcity').focusout(function(){
if($('#txtcity').val()!=""){
var availableSchools = [];
$.ajax({
url: "do_findschools.php?city="+$('#txtcity').val()
}).done(function(data){
availableSchools = data.split(',');
alert(data);
});
$('#txtschool').autocomplete({
source: availableSchools,
dataType: "json"
});
}
});
});
</script>
很简单,当我在txtschool中输入内容时,没有任何内容弹出。我还使用了Chrome内置的调试器,但它没有显示任何错误。用户界面根本不起作用。 ajax 工作正常因为我在alert()行看到了正确的数据。我也导入了:
<link href="jquery/css/ui-lightness/jquery-ui-1.10.0.custom.css" rel="stylesheet" />
<script src="jquery/js/jquery-1.9.0.js" type="text/javascript"></script>
<script src="jquery/js/jquery-ui-1.10.0.custom.js" type="text/javascript"></script>
在我的头文件中。 为什么不起作用?
答案 0 :(得分:1)
在你的AJAX请求回来之前,正在执行初始化小部件的代码。如果您将alert
放置在初始化自动填充的位置,availableSchools
将为空。
将自动完成初始化代码放在done
函数中:
$.ajax({
url: "do_findschools.php?city="+$('#txtcity').val()
}).done(function(data){
availableSchools = data.split(',');
$('#txtschool').autocomplete({
source: availableSchools,
dataType: "json"
});
});
此外,我认为您需要$(document).ready()
而不是$(document.body).ready()
答案 1 :(得分:0)
ajax请求是异步的。因此,当您设置源时,ajax请求尚未返回且availableSchools = []。您可以使用async:false调用ajax请求。不建议这样做。或者您可以将自动完成功能移动到完成功能中。
$('#txtcity').focusout(function(){
if($('#txtcity').val()!=""){
var availableSchools = [];
$.ajax({
url: "do_findschools.php?city="+$('#txtcity').val()
}).done(function(data){
availableSchools = data.split(',');
$('#txtschool').autocomplete({
source: availableSchools,
dataType: "json"
alert(data);
});
答案 2 :(得分:0)