当我在加载了初始页面(#tsearch)的元素上使用下面的自动完成Jquery时,它会按预期执行。当我尝试将自动完成Jquery附加到使用.load()动态显示(#crec)的表单上的元素时,我得到一个奇怪的行为。自动完成在元素上添加和操作的CSS类和内联属性存在于元素中,并对表单字段中的“键入”做出反应(如firebug.console所示),但不显示任何选项列表。就好像Jquery功能的一部分附加但其他部分失败,没有错误抛出到控制台,对Jquery代码的唯一更改是目标元素,两者都只是文本输入框。
Jquery(定位非动态元素)
$(document).on("click","#tsearch", function() {
var customers = [
<?php
$query = "SELECT * FROM `tickets`";
$result = mysqli_query($con,$query);
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
$a = "\"$row[ticketnum] : $row[cfirstname] $row[clastname]\"," . $a;
}
$a = rtrim($a, ",");
echo $a;
?>
];
$( "#tsearch" ).autocomplete({source: customers});
});
在源视图中查看时的Jquery
$(document).on("click","#tsearch", function() {
var customers = [
"08311502 : Bill Stewart","08311500 : John Williams"];
$( "#tsearch" ).autocomplete({source: customers});
});
两个快速说明:所有Jquery都在源页面上加载,动态加载的页面中没有jquery。另外,我还没有尝试将上面的Jquery放在显示动态表单HOWEVER的.load()的回调中,因为所有的Jquery类和动作似乎都没有在回调中正确附加,我是不确定为什么或是否会产生影响。
答案 0 :(得分:1)
这可能是事件的问题。如果最初加载了有问题的元素,jQuery应该建立执行它自动完成事务所需的所有钩子。如果要自动完成的元素被动态加载到页面中,那么DOM应该知道关于元素的所有内容,允许jQuery进行CSS操作并且&#34;反应&#34;它。所以我想当你把代码放在.load函数中时,你允许jQuery建立它为它需要正确运行的元素创建的专用钩子。
如果您调试发生的事件,您可能能够识别出与.load回调中没有该代码相比没有被调用的内容。
答案 1 :(得分:0)
在.load()的回调范围内移动有问题的“Jquery”解决了该功能。已经说过,行为不是预期的,我不能说我理解为什么这会纠正问题。所以,直到有人建议更好的解释,这才是现在有用的。