Вопрос

Внутри диалога jQuery я хотел бы использовать функцию jQuery AutoComplete of jqueryui.

Затем я подготовил действие в моем контроллере (я использую 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>

Но скользящее окно с подарками не появляется. Если я положу предупреждение внутри функции ответа, я вижу правильные данные.

Я скучаю по тебе?

Спасибо за помощь

1-го редактированияКроме того, как изменить код для использования свойства «ID» выбранного элемента в возвращенном списке?

2-е редактирование: Я проверил больше с помощью инструмента Chrome Developer, и я видел, что, когда 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

Похоже, что плагин автозаполнения не находит элемент, когда он пытается установить Z-индекс скользящего предложения 1 Увеличить его контейнер. Первая ошибка появляется, когда открывается диалоговое окно JQuery UI. Вход для автозаполнения находится внутри вкладки jQuery, которая находится внутри диалогового окна jQuery

3-го редактирования: Я добавляю HTML Markup, чтобы быть завершенным

<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
       }
      }
     });

Если вы этого не делаете, получите Пожар. Отказ Это бесценный инструмент для веб-разработки. Вы можете установить точку останова на этот JavaScript и посмотреть, что происходит.

FGMENU с использованием функционального меню () и автозаполнения с использованием функции

Имя функции те же проблемы происходят

Вы можете изменить имя функции в FGMENU.JS

  $('#hierarchybreadcrumb6').menuA({content: $('#hierarchybreadcrumb6').next().html(),backLink: false});

На основании Lorenzo ответ я изменил

$.fn.fgmenu = function(options) { ... 

к

$.fn.fgmenu = function(options) { ...    

С этого плагина меню И это работало нормально (как автозаполнение, так и плагин меню)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top