自动完成功能可进行键入操作,但不能单击

时间:2019-05-03 21:37:49

标签: javascript jquery autocomplete

就像标题中一样,我对两个函数都使用相同的代码

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修改了我的自动填充内容

我想点击一下,显示所有可能的选项。

在我与自己创建的功能链接的问题中,单击它似乎对每个人都有效。但是,当我单击它不起作用。如果单击,请从屏幕上移至新选项卡,然后再返回即可。或如果我单击该字段,请单击该字段,然后再次单击它。您能看到这种行为的原因吗?

这几乎就像需要单击一下才能注册,然后在第二秒钟就可以生效。

我尝试删除on('click')函数并测试keyup,发现现在'keyup'需要2个keyup才能起作用

在将console.log(completion)放在回调中并在焦点调用中将console.log(“ HERE”)放在焦点调用中之后,我在日志上看到完成将打印多次,但不能在此处打印,如果关闭屏幕,回到这里,将在完成打印之间进行自我注入。

1 个答案:

答案 0 :(得分:0)

为了简洁起见,我将代码段作为答案。想法是将原始事件移到内部,作为对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');