javascript - 自动完成在 keyup 上工作但不点击
问题描述
就像标题状态一样,我对这两个函数使用相同的代码,就像这样
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);
我想点击一下,显示所有可能的选项。
在点击时,它似乎对我与我创建的函数相关联的问题中的每个人都有效。但是,当我单击它不起作用。如果我单击,将屏幕移到新选项卡,然后返回,它确实有效。或者如果我单击该字段,请单击它,然后再次单击它。你能看出这种行为的原因吗?
这几乎就像只需单击 1 次即可注册,然后在第二次就可以使用。
我尝试删除 on('click') 函数并测试 keyup,并注意到现在 'keyup' 需要 2 个 keyup 才能工作
在将console.log(completion) 放入回调中并将console.log(“HERE”) 放入焦点调用后,我在日志上看到完成将打印多次但不是HERE,如果我关闭屏幕然后回到HERE将在完成打印之间注入自身。
解决方案
为了清洁起见,我将发布该片段作为答案。这个想法是将原始事件移动到内部,作为对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');
推荐阅读
- amazon-web-services - Dynatrace AWS 访问密钥验证域 (url/ip)
- javascript - 如何淡化整个 html 正文内容,除了使用 jquery 悬停的内容?
- ios - Swift iOS如何删除顶部填充UICollectionView
- java - AWS Device Farm:APPIUM_JAVA_JUNIT_TEST_PACKAGE_CLASS_FILE_MISSING_IN_TESTS_JAR
- react-native - 更新 react-native 后无法使用 react-native-debugger
- html - 以相同的速率收缩 CSS 网格的列
- android - 如何更改 StreetViewPanoramaFragment 的相机角度?
- typescript - 在需要恢复应用程序状态时使用哪种模式?
- sql - 无法将带有多个点的数字插入 nvarchar 字段
- python - 加载多个模型表单 django 时出现“ManagementForm 数据丢失或已被篡改”错误