我有自动填充字段
$('.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
显示未定义
答案 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
所以这是完整的工作代码
$('.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)
});