4

この例のように、ユーザーが複数のタグを選択できるようにテキストフィールドで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;
    }
});

response( $.ui.autocomplete.filter(エラーはソース内の行から発生しています。何らかの理由$( "textarea:[name='tags']" ).autocompleteで完全に問題なく定義されていますが、$。ui.autocompleteはそうではありません。

このスクリプトの上にjQueryとjQueryUIの両方が含まれています。これを引き起こしている可能性がありますか?

編集:

alert($.ui);オートコンプリート関数の外に入れると表示されることに気づきましたが、オートコンプリート[Object object]のソース属性の中に同じアラートを入れると、未定義になります。$で同じことを行うと、$が内部で定義されていることがわかりますが、$。uiは定義されていません。ページに日付ピッカーもありますが、同じことを示しています。プラグイン内で$.uiが定義されていません。これらのプラグイン内でjQueryUIが定義されていないのはなぜですか?

編集2:

応答関数のすぐ上にsource$.noConflict()属性を入力すると、1つのタグを入力するのに十分な時間だけ機能し、日付ピッカーは機能しますが、オートコンプリートがクラッシュします。一度だけ実行されるようにcreate関数に入れてみましたが、ページ上の他のすべてのjQueryが無効になっています。

私はjQueryやJavascriptの経験があまりありませんが、jQueryUIプラグインがエイリアスを削除しているようです。

4

3 に答える 3

3

コードをラップする

$(document).ready(function() {
    // code here
});
于 2012-08-07T18:01:20.057 に答える
2

jQuery itself をまだ含めていない場合は、おそらく含める必要があります。

于 2012-08-07T17:59:16.953 に答える
1

何が原因なのかはまだわかりませんが、カウンターと if ステートメントを設定して、 $.noConflict が一度だけ実行されるようにすると、問題が解決しました。

于 2012-08-08T20:55:23.953 に答える