类型&#39;()=&gt;的参数JQuery的<HTML元素>&#39;不能分配给类型的参数

时间:2018-03-20 13:03:01

标签: javascript jquery ruby-on-rails ruby typescript

我有用于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(); }
    });
  });
  }

当我尝试编译它时,我有这个错误

  

类型的参数&#39;()=&gt; JQuery的&#39;不能赋予类型&#39;(this:HTMLElement,index:number,element:HTMLElement)=&gt;的参数。假|无效&#39 ;.     键入&#39; JQuery&#39;不能分配给&#39; false |无效&#39 ;.       键入&#39; JQuery&#39;不能指定为&#39; void&#39;。

这一行$('.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>

我如何解决?

1 个答案:

答案 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,这是不合适的。它应该返回falsevoid,而JQuery不是其中之一。具体来说,它不是void

也许你应该将上面一行改为

$('.airport_field').focus(function () {
    if (!$(this).val()) { return $(this).val(' ').keydown(); }
  });

没有return,看看它是否有效。

希望有所帮助。祝你好运。

相关问题