$.ui 在自动完成和 ui 插件中未定义

jai*_*ump 5 javascript jquery jquery-ui autocomplete jquery-autocomplete

我尝试在文本字段上使用 jquery 自动完成功能,以允许用户选择多个标签,如本例所示,但出现错误Uncaught TypeError: Cannot read property 'autocomplete' of undefined。这是导致问题的代码,大部分是从链接复制的。

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js"></script>
<script type="text/javascript">
var tags = [<?php
foreach($this->tags as $tag){
    echo "\"{$tag['name']}\",";
}
?>""];

$( "textarea:[name='tags']" ).autocomplete({
    minLength: 0,
    source: function( request, response ) {
        // delegate back to autocomplete, but extract the last term
        alert($.ui);
        $.noConflict();
        alert($.ui);
        response( $.ui.autocomplete.filter(
            tags, extractLast( request.term ) ) );
    },
    focus: function() {
        // prevent value inserted on focus
        return false;
    },
    select: function( event, ui ) {
        var terms = split( this.value );
        // remove the current input
        terms.pop();
        // add the selected item
        terms.push( ui.item.value );
        // add placeholder to get the comma-and-space at the end
        terms.push( "" );
        this.value = terms.join( ", " );
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

该错误来自response( $.ui.autocomplete.filter(源内部的行。由于某种原因,$( "textarea:[name='tags']" ).autocomplete它是完全正确和定义的,但 $.ui.autocomplete 不是。

我在这个脚本上方包含了 jQuery 和 jQuery UI。可能是什么原因造成的?

编辑:

我注意到,如果我将其放在alert($.ui);自动完成功能之外,则会显示[Object object],但如果我将相同的警报放在自动完成的源属性内,则它是未定义的。对 $ 执行同样的操作,显示 $ 已在内部定义,但 $.ui 未定义。我的页面上还有一个日期选择器,它显示相同的内容,$.ui 未在插件内定义。为什么 jQuery UI 在这些插件中未定义?

编辑2:

$.noConflict()源属性放在响应函数的正上方,使其工作时间足以让我输入一个标签,然后它会使自动完成功能崩溃,尽管日期选择器仍然可以工作。我尝试将它放入 create 函数中,这样它只会执行一次,但这只会禁用页面上的所有其他 jQuery。

我对 jQuery 或 Javascript 不太有经验,但 jQuery UI 插件似乎正在删除别名。

jai*_*ump 1

我仍然不知道是什么原因造成的,但设置了一个计数器和一个 if 语句,以便 $.noConflict 仅在解决问题后才执行。