我有用于jquery自动完成的ts代码
这是代码
function load_autocomplete_fields(){
$('.airport_field').each(function() {
$(this).autocomplete({
delay:10,
minLength: 0,
source(request, response) {
$(this.element[0]).attr('data-req-term', request.term);
$.ajax({
url: $(this.element[0]).attr('data-source'),
dataType: "json",
data: {
term: request.term
},
success(data) {
const results = [];
$.map(data.cities, function(value, key) {
results.push(value);
return $.map(value.airports, (value2, key2) => results.push(value2));
});
$.map(data.airports, (value, key) => results.push(value));
return response(results);},
error() { return response([]); }
});
return null;},
focus(event, ui) {
return false;},
select(event, ui) {
const qel = $(event.currentTarget);
qel.val(ui.item.fullname);
$(qel.attr('data-id-element')).val(ui.item.id);
return false;}
}).data("ui-autocomplete")._renderItem = function(ul, item) {
return create_autocomplete_item($(this.element[0]), ul, item);
};
$('.airport_field').on('autocompleteselect', function() {
if (this.id.indexOf('origin') !== -1) {
const id = this.id.split('_')[2];
return $(`#search_legs_${id}_destination_text`).focus();
}
});
return $('.airport_field').focus(function() {
if (!$(this).val()) { return $(this).val(' ').keydown(); }
});
});
}
当我尝试编译它时,我有这个错误
类型的参数'()=> JQuery的'不能赋予类型'(this:HTMLElement,index:number,element:HTMLElement)=>的参数。假|无效&#39 ;. 键入' JQuery'不能分配给' false |无效&#39 ;. 键入' JQuery'不能指定为' void'。
这一行$('.airport_field').each(function() {
这是HTML
<ul>
<li>
<div class="header"><%= _('Från') %></div>
<%= text_field_tag 'search[legs][0][origin_text]', @default_lsp[:legs][0][:origin_city][:return],
class: 'field-1 airport_field', placeholder: _('Från'),
"data-source" => '/autocomplete/origin/flight',
"data-id-element" => '#search_legs_0_origin_id' %>
<%= hidden_field_tag 'search[legs][0][origin_id]', @default_lsp[:legs][0][:origin_id] %>
<div class="quick-destinations hide-small"><%= generate_quick_links_html.html_safe %></div>
</li>
<li class="icon"><%= image_tag 'shared/right_left_arrow.png', class: 'right_left_arrow', "data-number" => 0 %></li>
<li>
<div class="header"><%= _('Till') %></div>
<%= text_field_tag 'search[legs][0][destination_text]', @default_lsp[:legs][0][:destination_city][:return],
class: 'field-3 airport_field', placeholder: _('Till'),
"data-source" => '/autocomplete/destination/flight',
"data-id-element" => '#search_legs_0_destination_id' %>
<%= hidden_field_tag 'search[legs][0][destination_id]', @default_lsp[:legs][0][:destination_id] %>
</li>
我如何解决?
答案 0 :(得分:1)
在这一行:
return $('.airport_field').focus(function () {
if (!$(this).val()) { return $(this).val(' ').keydown(); }
});
为什么返回该通话的结果?除非您希望尽早停止迭代,否则each()
方法不希望您返回任何内容,在这种情况下,您应该返回false
。那是错误告诉你的:
Argument of type '() => JQuery' is not assignable to parameter of type '(this: HTMLElement, index: number, element: HTMLElement) => false | void'. Type 'JQuery' is not assignable to type 'false | void'. Type 'JQuery' is not assignable to type 'void'.
装置
该函数返回
JQuery
,这是不合适的。它应该返回false
或void
,而JQuery
不是其中之一。具体来说,它不是void
。
也许你应该将上面一行改为
$('.airport_field').focus(function () {
if (!$(this).val()) { return $(this).val(' ').keydown(); }
});
没有return
,看看它是否有效。
希望有所帮助。祝你好运。