【问题标题】:jQuery match what I type against listjQuery 匹配我在列表中输入的内容
【发布时间】:2017-04-21 14:14:10
【问题描述】:

我正在尝试测试我输入的内容是否与字符串列表匹配,但是因为我使用 indexOf 如果我输入 a 如果a 在字符串中的任何位置,我仍然会得到匹配,而不是如果第一个字母是a

因此,例如,我应该能够输入 au 并得到 Audi 而不是像 Yhjaukj 这样的例子。

这是我当前的代码,它从一个选择框选项中创建一个字符串列表,然后当我在可编辑范围内键入时搜索这些选项。

var $makes = [];
  $('#make option').each(function() {
    if ($(this).val() !== '')
      $makes.push({id: $(this).val(), value: ($(this).text()).replace(/\((.*)\)/, '')});
  });
  console.log($makes);

  $('#marv_search_make span.value').on('blur keyup paste', function() {
    var $val = ($(this).html()).toUpperCase();

    var $result;
    for(var i=0; i<$makes.length;i++) {
      if (~($makes[i].value).indexOf($val))
        $result = $makes[i].value;
    }
    $('#marv_search_make i.hint').html($result);
  }).html($makes[0].value);

【问题讨论】:

标签: jquery


【解决方案1】:

您所要做的就是根据数组中的每个条目检查跨度的值,看看它是否以该值开头。如果是,indexOf() 应该返回 0。

for(var i=0; i<$makes.length;i++) {
  if (($makes[i].value).indexOf($val) == 0){
    $result = $makes[i].value;
    return false;
  }      
}

或者你可以使用正则表达式。

for(var i=0; i<$makes.length;i++) {
  if (($makes[i].value).match("^"+$val)){
    $result = $makes[i].value;
    return false;
  }      
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-11
    • 2012-11-26
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多