2009-05-14 7 views
3

Все,JQuery автозаполнения в диалоге Ошибки

Я использую JQuery автозаполнения плагин 1.0.2 в JQuery UI Dialog. К сожалению, есть 2 сценариев, которые вызывают ошибки сценария в IE и FireFox. Я буду предоставлять ошибки FireFox Firebug, поскольку они более наглядны.

Во-первых, вот скрипт JQuery автозаполнения, который позволяет для выбора нескольких имен:

var queues = <% Html.RenderAction("AvailableQueues"); %>; 
$($.jqId("requestQueuesText"), $theForm).autocomplete(queues, { 
    minChars: 1, 
    formatItem: function(row) { 
     return row.Description;     
    }, 
    multiple: true, 
    multipleSeparator: ";" 
}); 

Теперь, вот два сценария, которые вызывают ошибки происходят:


1) Введите пробел «» перед чем-либо еще, и я сразу же получу

ОШИБКА: currentValue не определено; onChange() jquery.a ... mplete.js (строка 239); [Перерыв об этой ошибке], если (currentValue.length> = options.minChars) {

2) Закрыть диалог пока автозаполнения раскрывающийся список является открытым, но без выбора пункта

* Это сообщили ошибка, которую я должен исправить. После закрытия диалогового окна окно автозаполнения останется в представлении от нескольких миллисекунд до нескольких секунд. Основная цель заключается в том, что раскрытие автозаполнения закрывается, когда диалог закрывается, не возвращая никаких ошибок. Я уверен, что устранение ошибок позволит решить общую проблему.

ОШИБКА: неперехваченное исключение: [Exception ... "Компонент возвращается код ошибки: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMNSHTMLTextAreaElement.setSelectionRange]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" Location: «JS кадра :: http://localhost:2659/Scripts/jquery.autocomplete.js: : не анонимным :: строка 752" данные: нет]


Просто от глядя на autocomplete documentation, я вижу, что, возможно, придется использовать formatItem вариант по-разному.

Кроме того, я наткнулся на BGIFRAME, который выглядел, возможно, помочь в той или иной форме.

Заранее спасибо за любую помощь!

ответ

1

Я был в состоянии решить первую проблему, приковав на KeyDown событие с кодом автозаполнения:

var queues = <% Html.RenderAction("AvailableQueues"); %>; 
    $($.jqId("requestQueuesText"), $theForm).autocomplete(queues, { 
     minChars: 1, 
     formatItem: function(row) { 
      return row.Description;     
     }, 
     multiple: true, 
     multipleSeparator: ";", 
     selectFirst: false 
    }).keydown(function(event) { 
     if (this.value != "" && this.value.charAt(this.value.length-1) != ";") 
      return true; 

     var keycode = $.browser.msie ? event.keyCode : event.which; 
     return !/\s/.test(String.fromCharCode(keycode)); 
    }); 

Это запретит пропуски при первоначальном вводе в текстовую область и также предотвратить пробелы после запятой (multipleSeparator).

По-прежнему возникают проблемы с # 2. Я думаю, мне нужно добавить событие зависания или щелчка на . Закрыть или $ ('a.close-trigger'), который удалит фокус() из текстовой области, которая, в свою очередь, заставит выпадающее окно автозаполнения исчезнуть ...Пока не знаю точно, как это сделать со следующим диалоговым кодом:

$(".requestLink").click(function(event) { 
     event.preventDefault(); 
     var $this = $(this); 
     $this.addClass("loading"); 
     $.get(this.href, function(data) { 
      $this.removeClass("loading"); 
      var $req = $("<div></div>").dialog({ 
       autoOpen: true, 
       height: 650, 
       width: 750, 
       modal: true, 
       title: "Request", 
       overlay: { "background-color": "#d2d2d2", "opacity": "0.40"} 
      }).html(data); 
     }); 
    }); 
+0

Мне удалось выяснить вторую часть моего нелепого вопроса. В основном, мне просто нужно было использовать событие forforeclose диалога и метод размытия любого поля, использующего плагин автозаполнения. Полный пример решения можно найти по адресу http://www.danielmckenzie.net/post/2009/05/18/Forcing-blur()-on-JQuery-Autocomplete-Plugin-when-used-in-JQuery- UI-Dialog.aspx. – BueKoW

Смежные вопросы