无法获得自动填充字段值

时间:2018-04-26 14:07:36

标签: javascript jquery

我有自动填充字段

$('.airport_field_destination').on('autocompleteselect', (event, ui) => {
  var id = Number($(this).attr('data-number'))

  $(`#search_legs_${id + 1}_origin_text`).val(ui.item.value);
  $(`#search_legs_${id + 1}_origin_id`).val(ui.item.id)
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" name="search[legs][0][destination_text]" id="search_legs_0_destination_text" value="London (LON), England" class="field-3 airport_field airport_field_destination ui-autocomplete-input" data-number="0" placeholder="Till" data-source="/autocomplete/destination/flight"
  data-id-element="#search_legs_0_destination_id" autocomplete="off">

var id对我说NaN

我的麻烦在哪里?

更新

event.target我可以获得身份证明。但ui.item.value显示未定义

3 个答案:

答案 0 :(得分:1)

this事件未定义,因为箭头函数不捕获上下文(它使用外部this上下文)。如果您使用function(event, ui) { ... }事件处理程序语法,那么您将获得正确的this

否则,如果您想获得正确的元素,可以使用event.target替代this,如@GeorgeBailey建议的那样。

答案 1 :(得分:1)

您的代码有两个问题。当您使用arrow函数作为事件处理程序this的回调时,您的想法并不在此。

所以将此更改为event.target

其次,ui.item.value,我不知道这是什么。但看起来你正试图获得价值。所以使用$(ui).val(),这应该有用。

您的最终脚本将如下所示

$('.airport_field_destination').on('autocompleteselect', (event, ui) => {
  var id = Number($(event.target).attr('data-number'))

  $(`#search_legs_${id + 1}_origin_text`).val($(ui).val());
  $(`#search_legs_${id + 1}_origin_id`).val($(ui).val());
});

答案 2 :(得分:0)

所以这里是答案,如何做到这一点

感谢@GeorgeBailey建议使用id

我可以像event.target一样使用箭头功能或者像这样做

$('.airport_field_destination').on('autocompleteselect', function(event, ui){
  var id = Number($(this).attr('data-number'))

对于ui.item - ui没有value

以下是ui - {item: {…}}item: {type: 1, id: 6540382, fullname: "London (LON), England", name: "London", city: "London", …}__proto__: Object

的console_log

所以这是完整的工作代码

$('.airport_field_destination').on('autocompleteselect', function(event, ui){
  var id = Number($(this).attr('data-number'))
  console.log(ui);
  $(`#search_legs_${id + 1}_origin_text`).val(ui.item.fullname);
  $(`#search_legs_${id + 1}_origin_id`).val(ui.item.id)
});