当前位置: 首页 > 知识库问答 >
问题:

使用typefirst,如何将匹配的用户输入视为匹配?

茹航
2023-03-14

我正在为一个Wordpress插件项目做出贡献,该项目使用推特字体提前(和猎犬)和JQuery。

该插件包含有关组织组的信息。当用户键入他们希望添加到数据库中的组的名称时,类型前进/猎犬会根据现有组提供建议(弹出)。如果用户使用鼠标或箭头键从弹出窗口中的建议中选择一个现有的组,或者当显示所需的自动完成组名称但用户仅部分完成时按下选项卡,则选择匹配并为该组选择其余元素/字段从数据库中填充。这是工作所需的行为。

如果用户键入新的组名(Typefirst/Bloodhound找不到匹配的组名),则用户输入的组名和其他信息将用于在数据库中创建新的组。这部分也管用。

当用户键入现有组的名称,但不是从自动完成/弹出建议中选择组,而是继续键入整个组名称,然后在下一个字段上按下选项卡或单击鼠标时,就会出现问题。当用户这样做时,与组相关的数据不会自动填充。

从js文件:

$('input#group').typeahead(null, {
        displayKey: 'value',
        source: array_of_groups
    }).on('typeahead:autocompleted typeahead:selected', function($e, group){
        $('input[name=website]').val(group.website);
        $('input[name=email]').val(group.email);
        $('input[name=phone]').val(group.phone);
});

我已经读了type前留档,但我没有看到(或理解?)当用户已经输入自动完成建议的所有字母时,任何允许我更改库处理选项卡的行为的选项或自定义事件。我也不认为有办法让Typefirst/Bloodhound做最后一次检查,看看输入字符串是否与源中的任何现有值相匹配。

我发现了一个类似的问题(使用typeahead时在onblur事件期间选择value),我认为这基本上涉及到再次循环数据源以查找匹配项。我可能能够实现类似的东西,但我正在寻找一个与Typeahead/Bloodhound更紧密集成的解决方案。

我发现的另一个建议是在blur上插入一个击键(即tab),但正如我在上面指出的,在键入整个名称后进行tab似乎不会触发该函数。我也不确定这是否会触发Typeahead自定义事件。

下面是模拟项目相关部分的代码jsfiddle。我在这个提取中了解到,如果用户键入组的名称而不匹配确切的大小写,选项卡实际上会抓取正确的建议作为匹配。但是,如果用户键入组的确切名称并单击选项卡(或单击鼠标到下一个字段),则不会触发提前键入匹配,问题仍然存在。

我将仔细研究一下是否有一种方法可以将模板和函数结合使用,但欢迎您提出建议。

共有1个答案

蔺弘
2023-03-14

在研究Twitter Typeahead文档后,我发现了名为Typeahead:change:

typeprep: Change-本机更改事件的规范化版本。当输入失去焦点并且自最初接收焦点以来该值已更改时触发。

使用它,我创建了两个事件,一个用于失去焦点的情况,另一个用于选择建议的情况。

var myTypeahead = $('input#group').typeahead({
  minLength: 0,
  hint: true
}, {
  displayKey: 'gname',
  source: groups.ttAdapter()
});

myTypeahead.on('typeahead:change', function($e, group) {
  $.each(groupData, function() {
    if (this["gname"].toUpperCase() === group.toUpperCase()) {
        console.log("Match!");
      $('input[name=website]').val(this.gwebsite);
      $('input[name=notes]').val(this.gname);
    }
  });
});

myTypeahead.on('typeahead:autocompleted typeahead:selected', function($e, group) {
  //  myTypeahead.off('typeahead:change');
  $('input[name=website]').val(group.gwebsite);
  $('input[name=notes]').val(group.gname);
});

这是修改后的JSFIDLE。

 类似资料:
  • 我是ANTLR的新手。我想写一个语法来解析下面的输入: 语法如下:: 当我尝试使用语法解析上述输入时,它会引发以下异常:: 第1行:0不匹配的输入'commit a1b2c3d4',应为'commit' 我已经引用了ANTLR4:不匹配的输入链接,但仍然不清楚发生了什么。

  • 我试图检查字符串是否包含完全匹配。例如: String str="这是我的字符串,具有-Policy和-p" 我怎样才能做到以下几点:

  • 问题内容: 因此,这个问题使我们的用户与其他在线用户匹配。但是,这不仅仅是一对一的比赛。给一个用户5个其他用户的选择,然后将其标记为可见,并且当该用户请求再显示5个用户时,不应再显示。在此过程中,更多的人可以上网。 问题是,我希望使用Redis在每个用户的选择中显示其他用户的方法,但是算法主要是我正在寻找的。我正在尝试以最快的方式实现这一点,如果可能的话,使用redis,但是如果需要的话,我也可以

  • 问题内容: 我正在从Android的本机代码接收long或int形式的返回值,我想将其转换或与enum匹配以用于处理目的。可能吗 ?怎么样? 问题答案: 如果您完全控制值和枚举,并且它们是顺序的,则可以使用枚举序号值:

  • 问题内容: 我是Java的新手学生,正在尝试完成一个使用扫描仪输入5个学生姓名的程序,然后在其中进行循环以为每个学生获得3个成绩。我一直卡在输入错误匹配错误,我不知道为什么。我试图正确匹配将哪些类型的输入输入到变量中。任何帮助将不胜感激! 这就是我所拥有的: 这就是我得到的: 问题答案: 您的问题在第20行。 这意味着在输入中,它期望一个int值,但它会发现另一件事,例如double,char数组

  • 1.1. ID 体系设计 事件表和用户表都包含 userId 属性,该属性作为用户的唯一标识。 有两种场景: 基于设备来作为用户标识:这种场景下,用户标识比较准确,但无法跨端做用户匹配 基于用户ID来作为用户标识:可跨端做用户匹配,但用户在匿名和注册,以及登出及登入过程,会有可能出现多个 userId,导致日活、留存、漏斗等统计有差距。 1.2. 基于用户 ID 做为用户标识的优化方案 1.2.1