我正在尝试在jQuery自动完成框中进行选择之后,简单地将一个函数从服务器php页面回送到客户端浏览器,以便该函数可以根据需要(客户端)处理,其值为自动完成框。自动完成在php页面中如下:
mypage.php
<html>
<head>
<title>Autocomplete</title>
<link href="../../jqSuitePHP/themes/redmond/jquery-ui-1.8.2.custom.css" id="skin" rel="stylesheet" type="text/css" />
<script src="../../jqSuitePHP/js/jquery-1.6.min.js" type="text/javascript"></script>
<script src="../../jqSuitePHP/js/jquery-ui-1.8.14.custom.min.js" type="text/javascript"></script>
<script>
$(function ac_boxes() {
$("#dlr").autocomplete({
source: "dlrAutocompleteSearch.php",
minLength: 2,
search : function(){$(this).addClass('ui-autocomplete-loading');},
open : function(){$(this).removeClass('ui-autocomplete-loading');},
select: function( event, ui ) {
// Here's my attempt at calling the client side 'test' function
<?php echo '<script>window[test](ui.item.value)</script>;' ?>
}
});
});
</script>
</head>
<body>
---------
</body>
</html>
但是&lt;和&gt;造成问题。如果我删除&lt;和&gt;,页面完全处理(当然没有'select'功能。如果我添加&lt;和&gt;,页面不会处理。
我尝试使用php htmlentities()分配字符串:
<?php
$val = htmlentities('<script>window[test](ui.item.value)</script>;');
echo $val;
?>
但这似乎也不起作用。
我的问题源于php是否在jQuery脚本中?如果是这样,那么从自动完成的'select'方法调用php的另一种方法是什么?
提前致谢。
答案 0 :(得分:1)
我不认为这段代码正在做你认为它正在做的事情;当你加载页面时,执行PHP并在源代码中得到类似的结果:
<script>
...
select: function( event, ui ) {
<script>window[test](ui.item.value)</script>;
}
...
</script>
哪个不正确(脚本标签中不需要script
个标签;正如您所见,它不会做任何事情,只会导致问题。)
如果要在选择更改时执行某些PHP,则必须通过AJAX,提交表单或其他任何方式再次调用服务器。这样的事情可能更像你想要的东西:
select: function(event, ui) {
// send the selected value to the server for processing
$.get("processChange.php", {value: ui.item.value});
}
有关详情,请参阅$ .get()上的JQuery docs。
另一方面,如果您要做的就是使用所选值调用另一个客户端javascript函数(例如test
),则不需要PHP来回显任何内容。这应该是诀窍:
<script>
function test(args) {
// ...
}
$("#dlr").autocomplete({
// ...
select: function(event, ui) {
test(ui.item.value);
}
}
</script>
答案 1 :(得分:0)
您可以像使用HTML一样使用<
和>
。您还可以使用replace()
函数查找所有&lt;和&gt;并替换它们。