自动完成“不是一个function”

我们在一个简单的HTML页面中测试了Jquery UI(jquery-ui-1.8.10.custom.min.js)自动完成function。

然后,我们将相同的代码复制到Asp.net用户控件中,它就会停止工作。 Javascript错误显示“$ searchBox.autocomplete不是函数”。

此用户控件正在Asp.net Sitefinity 3.7项目中使用。 在页面上它有一个ScriptManager。 不确定我还能添加什么……

有谁知道发生了什么事?

Ammend:

   $(document).ready(function () { var termTemplate = "%s"; $('input#searchInput').autocomplete({ source: ['johannesburg z', 'johannesburg x', 'johannesburg v', 'johannesburg b', 'johannesburg a', 'johannesburg q', 'johannesburg u', 'johannesburg y', 'johannesburg o', 'johannesburg p'], minLength: 3, open: function (e, ui) { var acData = $(this).data('autocomplete'), styledTerm = termTemplate.replace('%s', acData.term); acData .menu .element .find('a') .each(function () { var me = $(this); me.html(me.text().replace(acData.term, styledTerm)); }); } }); });  

谢谢。

该错误通常意味着尚未加载jquery或插件。 在加载文档之前检查您的函数调用是否未被命中:

 $(function(){ var $searchBox = $('#mysearchBox'); $searchBox.autocomplete(...); }); 

还要检查javascript文件的路径是否正确。 Firebug或谷歌浏览器开发人员工具可用于检查这两个问题。

它可能是:

  1. jquery.js加载的顺序。
  2. 重复的jquery.js包含在同一页面中。

也许尝试使用jQuery.noConflict()方法进行测试。 它基本上只是让你为jQuery使用不同的别名。 这在SF4.3中对我有用。

 var j = jQuery.noConflict(); // Do something with jQuery j("div p").hide(); // Do something with another library's $() $("content").style.display = 'none'; 

我有这个问题,发生的事情是我的jQuery文件加载了两次。 差不多这在我脑海里:

   

然后我有一个AJAX调用加载我的文档的更多部分,还有另一个:

  

在我的AJAX结果中的脚本标记,我的$ .hmtl()我的结果是我的文档。 通过这样做,我们几乎重新定义了改变或利用的所有var thatjquery-ui.min.js。

这是由于与Sitefinity自己使用jQuery的冲突造成的。

如果将jQuery的脚本引用移动到结束表单标记之前的页面底部。 这将解决Sitefinity 4.0中的问题,但我怀疑它也将解决Sitefinity 3.7中的这个问题。