如何在刷新的DIV中重新启动JQuery自动完成?

时间:2012-11-22 09:21:30

标签: jquery jquery-autocomplete

我有DIV,里面有一个从JQuery样本中复制的自动完成小部件:http://jqueryui.com/resources/demos/autocomplete/default.html

按下按钮时,DIV的内容将替换为新的HTML,其中HEADER包含动态生成的Javascript以初始化自动完成

<head> .. 
<script>
$(function() {
    var availableTags = [
        "ActionScript",
        "AppleScript",
        "Scala",
        "Scheme"
    ];
    $( "#tags" ).autocomplete({
        source: availableTags
    });
});

我的问题是:$(function())在DIV ==自动完成的后续重新加载时不会被评估。

令人惊讶的是,DIV没有“准备好”的事件

请告知如何重新初始化自动填充代码。

主页面包含一个PROJECT选择器,在更改时将使用动态生成的详细信息重新加载DIV,包括自动完成小部件。

<html>
 <head>
  <script>
   function refresh_div() {
    ..    
    document.getElementById(DYNA_DIV).innerHTML = self.xmlHttpReq.responseText;
   }
  </script>
 </head>
<body>
 <select id=PROJECT_ID onchange="refresh_div()" ..>
 <div id="DYNA_DIV"> ..here is dynamically generated form with autocomplete widget containing items related to the PROJECT selected above</div>
</body>
</html>

DIV的HTML如下所示。根据建议删除HTML,HEAD,BODY

首次加载自动完成功能。刷新DIV的内容时,初始化程序脚本不会运行

  ..  <input type="text" name="AUTOCOMP"> ..

 <script>
    $(function() {
        var availableItems = [ <% dynamically enumerate items for PROECT_ID %> ];

        $( "#AUTOCOMP" ).autocomplete({
            source: availableItems
        });
    });    

  </script>

-Alex

2 个答案:

答案 0 :(得分:1)

您是否将DIV的内容替换为完整的HTML树

<html>
  <head>
    <script>...

如果是,那么除非您通过创建IFRAME元素包含此新树,否则浏览器会忽略您的内容。您应该只输出要放在DIV内的内容(不带标记:HTMLHEAD及其所有标记BODY),并且只包含{{1}内的内容}}。如果您需要BODY,还可以在SCRIPT内加入BODY

<强>更新

更新问题后,我看到一个错误。也许这只是个问题,但让我们试试:

您拥有"#AUTOCOMP"选择器,但您拥有<input type="text" name="AUTOCOMP">。如果这就是您的内容的样子,那么您应该选择'input[name="AUTOCOMP"]'选择器的输入。

答案 1 :(得分:0)

尝试将代码包装在add_load

Sys.Application.add_load(function () {

    var availableTags = [
        "ActionScript",
        "AppleScript",
        "Scala",
        "Scheme"
    ];
    $( "#tags" ).autocomplete({
        source: availableTags
    });

});