【问题标题】:Autocomplete working on keyup but not click自动完成在 keyup 上工作但不点击
【发布时间】:2019-09-22 10:45:17
【问题描述】:

就像标题所述,我对这两个函数使用相同的代码,就像这样

function autoComplete() {
    var jarName = $("#artifactId").val();
    var jarVersion = $("#version").val();
    url = "/xx/yy/zz/"+jarName+"/"+jarVersion+"";
    if (jarVersion===""){
        url = "/api/eetools/appdependencyfinder/"+jarName+"";
    }
    $.getJSON(url, function(completion) {
        $("#version").autocomplete({
            source: completion,
            minLength: 0
        })
        .focus(function() {
            $(this).autocomplete('search', $(this).val())
        });
    });
}

$("#version").on('keyup',autoComplete);
$("#version").on('click',autoComplete);

我从here修改了我的自动完成功能

我想在点击时显示所有可能的选项。

点击它似乎对我与我创建的函数链接的问题中的每个人都有效。但是,当我单击它不起作用。如果我单击,将屏幕移到新选项卡,然后返回,它确实有效。或者如果我单击该字段,请单击它,然后再次单击它。你能看出这种行为的原因吗?

这几乎就像只需点击 1 次即可注册,然后第二次就可以使用。

我尝试删除 on('click') 函数并测试 keyup,并注意到现在 'keyup' 需要 2 个 keyup 才能工作

在将console.log(completion) 放入回调和console.log(“HERE”) 放入焦点调用后,我在日志上看到完成将打印多次但不是HERE,如果我关闭屏幕然后回到 HERE 将在完成打印之间注入自身。

【问题讨论】:

  • 为什么需要keyupclick?看来keyup 应该完全满足您的需求
  • 因为如果他们单击该字段,我希望他们看到所有选项,而不是开始输入并查看选项编辑:如果我拿走 click keyup 需要两个键才能工作
  • 似乎autoComplete 中的focus 事件并没有像click 那样触发。我会向上移动focus 代码,甚至完全取出。在其他活动中调用 focus 会很棘手
  • @TonyM 向上移动是什么意思?是否有可能调用 async() ?
  • 问题在于嵌套事件。你可以尝试这样的事情:(仅供参考 - 未测试):

标签: javascript jquery autocomplete


【解决方案1】:

为了清洁起见,我将发布 sn-p 作为答案。这个想法是将原始事件移动到内部,作为对autocomplete的回调。

function autoComplete(event) {
    var jarName = $("#artifactId").val();
    var jarVersion = $("#version").val();
    url = "/xx/yy/zz/" + jarName + "/" + jarVersion + "";
    if (jarVersion === "") {
        url = "/api/eetools/appdependencyfinder/" + jarName + "";
    }
    $.getJSON(url, function(completion) {
        $("#version").autocomplete({
            source: completion,
            minLength: 0
        }).on(event, function() {
            $(this).autocomplete('search', $(this).val())
        });
    });
}
autoComplete('click'); 
autoComplete('keyup');

【讨论】:

  • 是的,不幸的是这也不起作用。我注意到,如果我将 console.log("HERE") 放在 focus() 函数中,并将 console.log(completion) 放在父级中,那么当我每次单击完成时都会打印出来,而这里不会。当我从屏幕切换回屏幕时,“这里”会打印出来,但它会在完成打印的中间注入自己,这太奇怪了
猜你喜欢
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 2013-01-22
  • 2011-01-28
  • 2012-01-25
  • 2013-10-28
相关资源
最近更新 更多