2015-09-25 4 views
0

У меня есть метод webservice, который принимает идентификатор элемента для определения источника для автозаполнения.Получить идентификатор элемента в функции источника автозаполнения jQuery

В двух словах, я делаю это:

$("input[type='text']").autocomplete({ 
    source: function(request, response) { 
     var id = $(this).attr('id'); 
     var params = {'id': id, 'term': request.term}; 
     var jsonParams = JSON.stringify(params); 
     $.ajax({ 
      type: "POST", 
      url: "Page.aspx/GetAutoCompleteList", 
      data: jsonParams, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) { 
       response(JSON.parse(msg.d)); 
      }, 
      error: function() { 
       response([]); 
      } 
     }); 
    } 
}); 

Но id не относится к первоначальному селектору.

Что я могу сделать, чтобы получить идентификатор выбранного элемента input? Или что лучше для этого?

ответ

1

Попробуйте

$(this.element).prop("id"); 

this.element[0].id; 

$(this.element.get(0)).attr('id'); 

JSFIDDLE

$("input[type='text']").autocomplete({ 
 
    source: function(request, response) { 
 
     var id = $(this.element).prop("id"); 
 
     var id2=this.element[0].id; 
 
     var id3=$(this.element.get(0)).attr('id'); 
 
     console.log(id); 
 
     console.log(id2); 
 
     console.log(id3); 
 
     var params = {'id': id, 'term': request.term}; 
 
     var jsonParams = JSON.stringify(params); 
 
     $.ajax({ 
 
      type: "POST", 
 
      url: "Page.aspx/GetAutoCompleteList", 
 
      data: jsonParams, 
 
      contentType: "application/json; charset=utf-8", 
 
      dataType: "json", 
 
      success: function(msg) { 
 
       response(JSON.parse(msg.d)); 
 
      }, 
 
      error: function() { 
 
       response([]); 
 
      } 
 
     }); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> 
 
<input type="text" id="asd"></input>

+0

Что такое downvotes? –

+0

Вы проверили это? –

+0

Ссылка на 'this' в проблеме OP не будет работать с кодом, который вы предоставили. – bonesbrigade

2

Вы должны были бы поддерживать контекст каждого входного элемента, что-то вроде этого:

$("input[type='text']").each(function (i, ele) { 
    ele = $(ele); 
    ele.autocomplete({ 
     source: function (request, response) { 
      var id = ele.attr('id'); 
      var params = {'id': id, 'term': request.term}; 
      var jsonParams = JSON.stringify(params); 
      $.ajax({ 
       type: "POST", 
       url: "Page.aspx/GetAutoCompleteList", 
       data: jsonParams, 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (msg) { 
        // ... 
       }, 
       error: function() { 
        // ... 
       }, 
       async: false 
      }); 
     } 
    }); 
}); 
+0

Beat me to :) :) –

+0

должен 'ele' быть глобальной переменной? –

+0

'ele' не является глобальным, он передается в анонимную функцию – bonesbrigade

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