Используя селектор класса для автозаполнения, нужно получить идентификатор элемента - PullRequest
0 голосов
/ 05 ноября 2010

Я реализовал плагин Dylan Verheul Autocomplete 1.6 JQuery на веб-странице. Я использую автозаполнение на более чем 20 различных полях ввода на странице. Имя класса используется в качестве селектора. Автозаполнение отлично работает на каждом из различных элементов ввода, хотя у меня возникают проблемы с получением идентификатора текущего элемента ввода, на котором мы находимся.

В основном это HTML-код:

<form name="myform" action="blah.asp" method="post">
  <input class="ItemMatchText" type="text" id="selectQuestion_104657" name="selectQuestion_104657" value="">
  <input class="ItemMatchText" type="text" id="selectQuestion_104664" name="selectQuestion_104664" value="">
  <input class="ItemMatchText" type="text" id="selectQuestion_104710" name="selectQuestion_104710" value="">
</form>

JavaScript в основном такой:

$(function() { 
  var selectedId = "";
  $('.ItemMatchText').autocompleteArray(ItemArray, {
    autoFill:true,
    matchContains:true,
    onItemSelect: function(data1) {
      selectedId = data1.extra[0];
      }
  });

//...
});

Строка: selectedId = data1.extra [0]; получает следующий столбец в массиве для выбранной строки. В этом же или любом другом случае я хотел бы получить идентификатор элемента, который в настоящее время вводится, чтобы вызвать этот автоматический выбор.

Все, что я пробовал, либо возвращает элемент LI, либо первый элемент INPUT на странице с классом ItemMatchText.

Как получить идентификатор входа?

Ответы [ 3 ]

0 голосов
/ 06 ноября 2010

Боюсь, это не реализовано.

Вы можете попробовать создать отдельные автоклемптеры для каждого входа:

$(function() {  

$('.ItemMatchText')
.each(
        function()
        {
          $(this).autocompleteArray(ItemArray, 
            {
              autoFill:true,
              inputObj:this,
              matchContains:true,
              onItemSelect: function() 
                            {
                              alert(this.inputObj.id);
                            }
            });
        }
      );
});
0 голосов
/ 06 ноября 2010

Прочитав сценарий автозаполнения пару раз, я решил, что должен быть в состоянии вернуть значение ввода, данное функции в первую очередь.

Вот начало функции:

jQuery.autocomplete = function(input, options) {
    // Create a link to self
    var     me = this;

    // Version
    var     version = 1.6;

    // Create jQuery object for input element
    var     $input = $(input).attr('autocomplete', 'off');

На основании его использования я предположил, что input был выбран элемент input: textbox. Я чем искал код для OnItemSelect и нашел:

if (options.onItemSelect) {
    setTimeout(function() {
        options.onItemSelect(li)
        }, 1);
}

Чтобы открыть входную переменную с помощью элемента LI, я просто добавил его:

if (options.onItemSelect) {
    setTimeout(function() {
        options.onItemSelect(li, input)
        }, 1);
}

Затем я мог бы просто получить элемент ввода для события onItemSelect.

$(function() { 
  var selectedId = "";
  var inputId = "";
  $('.ItemMatchText').autocompleteArray(ItemArray, {
    autoFill:true,
    matchContains:true,
    onItemSelect: function(data1, inputElm) {
      selectedId = data1.extra[0];  // Get the next column of in data row
      inputElm = inId.id;           // Get the input's Id!
      }
  });

//...
});

Вероятно, это не лучший способ сделать это, но в этом случае это сработало. Конечно, мне нужно заново минимизировать файл.

0 голосов
/ 06 ноября 2010
onItemSelect: function (data1) {
    selectedId = $(data1).attr('id');
}

Попробуйте это (я не очень знаком с этим плагином, но после просмотра источника это должно быть).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...