jQuery AutoCompleteは表示されません
-
02-10-2019 - |
質問
jqueryダイアログ内では、jqueryuiのjqueryオートコンプリート機能を使用したいと思います。
その後、コントローラーでアクションを準備しました(ASP.NET MVC2を使用しています)。
public ActionResult GetForos(string startsWith, int pageSize)
{
// get records from underlying store
int totalCount = 0;
string whereClause = "Foro Like '" + startsWith + "%'";
List<Foro> allForos = _svc.GetPaged(whereClause, "Foro", 0, pageSize, out totalCount);
//transform records in form of Json data
List<ForoModelWS> foros = new List<ForoModelWS>();
foreach ( Foro f in allForos)
foros.Add( new ForoModelWS() { id= Convert.ToString(f.ForoId),
text= f.Foro + ", Sezione: " + f.Sezione + ", " + f.AuthorityIdSource.Name });
return Json(foros);
}
クラスForomodelwsは、JSONで転送されるデータを保持するためにのみ使用される単純なクラスです。ここにあります
public class ForoModelWS
{
public string id;
public string text;
}
クライアント側には、次のjQueryコードがあります。
<input id="theForo" />
<script type="text/javascript">
$(document).ready(function() {
$("#theForo").autocomplete({
source: function(request, response) {
$.ajax({
type: "post",
url: "/Foro/GetForos",
dataType: "json",
data: {
startsWith: request.term,
pageSize: 15
},
success: function(data) {
response($.map(data, function(item) {
return {
label: item.text,
value: item.text
}
}))
}
})
},
minLength: 2,
select: function(event, ui) {
},
open: function() {
$(this).removeClass("ui-corner-all").addClass("ui-corner-top");
},
close: function() {
$(this).removeClass("ui-corner-top").addClass("ui-corner-all");
}
});
});
</script>
しかし、suggeestionsのスライディングウィンドウは表示されません。応答関数内にアラートを置いた場合、正しいデータを見ることができます。
何かが恋しいですか?
助けてくれてありがとう
最初の編集:さらに、返されたリストで選択した要素の「ID」プロパティを使用してコードを変更する方法は?
2番目の編集:Chrome Developer Toolで詳細を確認しましたが、AutoCompleteが起動するとエラーが表示されることがわかりました。以下:
Uncaught TypeError: Cannot call method 'zIndex' of undefined @ _assets/js/jquery-ui-1.8.4.custom.min.js:317
Uncaught TypeError: Cannot read property 'element' of undefined @ _assets/js/jquery-ui-1.8.4.custom.min.js:321
Uncaught TypeError: Cannot read property 'element' of undefined @ _assets/js/jquery-ui-1.8.4.custom.min.js:320
AutoCompleteプラグインは、スライディング提案1のZインデックスをコンテナに設定しようとすると、要素を見つけられないようです。 jQuery UIダイアログが開くと、最初のエラーが表示されます。オートコンプリートの入力は、jQueryダイアログ内にあるjQueryタブ内にあります
3番目の編集:HTMLマークアップを完了するように追加しています
<td width="40%">
<%= Html.LabelFor(model => model.ForoID)%>
<br />
<%= Html.HiddenFor(model => model.ForoID) %>
<input id="theForo" />
<%= Html.ValidationMessageFor(model => model.ForoID, "*")%>
</td>
解決
私は問題を見つけました。
私の場合、私は別のプラグインも使用していました、 これです.
そのプラグインは私のスクリプトの最後に含まれており、質問で説明されているエラーが発生しました。プラグインを削除しましたが、すべてが非常にうまく機能しています。
それを削除する前に、私はまた、両方のスクリプトを静的HTMLに入れる問題を分離しようとしました。このようなオートコンプリート機能の最も単純な使用でさえも経験しました
<script type="text/javascript">
$(document).ready(function() {
var availableTags = ["ActionScript", "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure",
"COBOL", "ColdFusion", "Erlang", "Fortran", "Groovy", "Haskell", "Java", "JavaScript",
"Lisp", "Perl", "PHP", "Python", "Ruby", "Scala", "Scheme"];
$("#theForo").autocomplete({
source: availableTags
});
});
</script>
私が得たエラーを引き起こすでしょう。
私の選択は、そのコードがもうサポートされていないためでも、メニュープラグインを削除することでした。
ありがとう!
他のヒント
この議論は本当に古いですが、誰かに役立つ場合に備えてここに追加します...ドロップダウンが表示されないようにオートコンプリートがまったく機能しない場合、最初に最も単純な形式をチェックしてください。下。
$("#txtLanguage").autocomplete({ source: ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"] });
これが機能しない場合、リンクされているjQueryスクリプトの問題です。私の場合、jquery.min.jsは古いバージョン1.7.1でしたが、他のすべてのスクリプトは1.8.18でした。
正しいバージョンのスクリプトを置き換えるだけで問題が解決しました。
これが誰かがオートコンプリートを機能させるという基本的な問題につまずくのに役立つことを願っています。
私が答えたように ここ, 、jquery UIのオートコンプリートの私の実用的な例で戦利品を取ります。に注意してください source
部。それが役に立てば幸い:
var cache = {};
$("#textbox").autocomplete({
source: function(request, response) {
if (request.term in cache) {
response($.map(cache[request.term].d, function(item) {
return { value: item.value, id: item.id }
}))
return;
}
$.ajax({
url: "/Services/AutoCompleteService.asmx/GetEmployees", /* I use a web service */
data: "{ 'term': '" + request.term + "' }",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
dataFilter: function(data) { return data; },
success: function(data) {
cache[request.term] = data;
response($.map(data.d, function(item) {
return {
value: item.value,
id: item.id
}
}))
},
error: HandleAjaxError // custom method
});
},
minLength: 3,
select: function(event, ui) {
if (ui.item) {
formatAutoComplete(ui.item); // custom method
}
}
});
今までにそうしていない場合は、入手してください Firebug. 。これは、Web開発のための貴重なツールです。このJavaScriptにブレークポイントを設定して、何が起こるかを確認できます。
関数メニュー()を使用してFGMENUと関数を使用してオートコンプリート
関数名は同じ問題です
fgmenu.jsの関数名を変更できます
$('#hierarchybreadcrumb6').menuA({content: $('#hierarchybreadcrumb6').next().html(),backLink: false});
ロレンツォ回答に基づいて修正しました
$.fn.fgmenu = function(options) { ...
に
$.fn.fgmenu = function(options) { ...
このプラグインから メニュー そして、それは正常に機能しました(オートコンプリートとメニュープラグインの両方)