【问题标题】:How to check if user has entered typeahed value如何检查用户是否输入了预输入值
【发布时间】:2017-12-31 00:42:55
【问题描述】:

我有以下代码:

 var students = new Bloodhound({
                datumTokenizer: Bloodhound.tokenizers.obj.whitespace('fullName'),
                queryTokenizer: Bloodhound.tokenizers.whitespace,
                remote: {
                    url: '/api/students?query=%QUERY',
                    wildcard: '%QUERY'                                                                                                               
               } 

            });


            $('#student').typeahead({
                minLength: 2,  
                highlight: true,  

            },
                {
                    name: 'students',
                    display: function (item) { return item.fullName },
                    source: students.ttAdapter(),

                    templates: {
                        empty: [

                            '<div class="tt-empty-message">' +
                            'No results found' +
                            '</div>'
                        ]                       
                    }

                }).on("typeahead:select",
                function (e, student) {

                    console.log("inside isselect");
                    isSelected = true;
                    vm.studentId = student.id;

                });

我试图捕捉一个场景,如果用户输入一些乱码或除预先输入的值之外的其他内容并单击提交按钮,那么我需要显示一条错误消息。为此,我需要捕获 typeahead 列表并查看 typeeahed 列表是否包含输入值。我怎样才能做到这一点?

我已经搜索这个解决方案 5 个小时了。我已经在其他线程上查看并实现了类似的答案,但似乎没有任何效果。例如看看这个答案:

http://jsfiddle.net/Fresh/bbzt9hcr/

我尝试了 baove 代码,但 typeahed 甚至没有出现。而我的代码工作得很好。请让我知道如何解决这个问题。先感谢您。

【问题讨论】:

  • 将整个对象存储在选择事件中...然后在提交表单时进行比较
  • 我不认为这会起作用,因为选择甚至只包含一个对象,而我需要捕获预先输入的列表并检查当用户点击提交按钮时列表是否包含用户输入.因此,每次用户进行预先输入选择时,列表都会更新。但我不知道如何捕获列表。
  • 他们一次只选择一个项目......与最后选择的项目相比,并存储在变量中
  • 呃!非常感谢。那行得通。你能帮我解决这个问题吗:stackoverflow.com/questions/48036930/…

标签: javascript jquery typeahead.js typeahead


【解决方案1】:

有多种方法可以解决这个问题,最简单的: 您可以监听 typeahead 更改事件并使用变量来存储所选值,然后在提交检查并发送该变量:http://jsfiddle.net/alfredopacino/bbzt9hcr/290/

yourTypehead.on('typeahead:selected', function($e, datum) {  // suggestion selected
      selectedMovie = datum.value
});
$('#submit').click(function() {
   if(selectedMovie) {
                //your ajax call
   } else {
       alert("no valid movie")
   }

});

问题在于它不包括用户手动输入有效值的情况。 要涵盖这种情况,您可以采用两种方法:

  • onSubmit 您可以添加一个“远程验证”:基本上是一个额外的 ajax 请求,以使用服务器检查该值是否有效
  • 将您的 typeahead 选择转换为“标签选择”,将标签限制为 1 并禁止任何自定义值 https://bootstrap-tagsinput.github.io/bootstrap-tagsinput/examples/(有很多插件这样做)

【讨论】:

  • 我的代码中已经有了 select 事件,我正在使用它来捕获学生 ID。那么,您是否建议一旦我获得学生 ID,我应该对数据库进行 ajax 调用以验证学生是否在数据库中?我正在考虑只获取预先输入的列表并根据该列表而不是 ajax 进行验证。很想听听您的意见。
  • 另外,依赖选择的另一个问题是,如果我从预先输入的值中选择一个值,然后删除它,然后随机写一些东西,表单将被提交,因为变量“selectedMovie " 将有一个有效的学生 ID。
  • 是的,如果您依赖选择事件,您将需要在提交时进行额外检查。我很确定所有这些问题都会像我说的那样使用标签输入自动解决..试一试(注意引导标签输入已经支持预输入..但如果你不喜欢它,你可以试试sliptree.github.io/bootstrap-tokenfield。 .或许多其他人)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 2020-04-30
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
相关资源
最近更新 更多