この例のように、ユーザーが複数のタグを選択できるようにテキストフィールドで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プラグインがエイリアスを削除しているようです。