Javascript 在jquery事件函数之前,等待onclick事件完成
我有一个国家标签系统。有一个用户可以执行查询的输入,查询结果显示为下拉框,单击其中一个结果后,将重置查询,并将国家名称“附加”到输入中Javascript 在jquery事件函数之前,等待onclick事件完成,javascript,jquery,html,Javascript,Jquery,Html,我有一个国家标签系统。有一个用户可以执行查询的输入,查询结果显示为下拉框,单击其中一个结果后,将重置查询,并将国家名称“附加”到输入中 $.each(data.countries, function(i, item) { var listItem = document.createElement("li"); var tagItem = document.createElement("span"); tagItem.innerHTML = item; tagIte
$.each(data.countries, function(i, item) {
var listItem = document.createElement("li");
var tagItem = document.createElement("span");
tagItem.innerHTML = item;
tagItem.onclick = function() { add_tag(item); };
tagItem.style.cursor = "pointer";
tagItem.className = "reg_c_interest_tag";
listItem.appendChild(tagItem);
document.getElementById("reg_c_interest_queryresult").appendChild(listItem);
});
这个系统看起来很像Stackoverflow的问题标签系统。我已经完成了所有这些步骤,除了一个,那就是在输入没有焦点时关闭菜单(这基本上意味着输入之外的每次单击都应该关闭查询菜单)
下面的代码负责将所有国家/地区添加到查询菜单中,请注意标记项。单击事件定义,一旦单击标记,它将“附加”到输入中
$.each(data.countries, function(i, item) {
var listItem = document.createElement("li");
var tagItem = document.createElement("span");
tagItem.innerHTML = item;
tagItem.onclick = function() { add_tag(item); };
tagItem.style.cursor = "pointer";
tagItem.className = "reg_c_interest_tag";
listItem.appendChild(tagItem);
document.getElementById("reg_c_interest_queryresult").appendChild(listItem);
});
要捕获输入之外的单击事件,我认为最新的选项应该是$(选择器)。focusout
事件:
$("#reg_c_interest_editor").focusout(function () {
$("#reg_c_interest_queryresult").empty();
});
问题
不幸的是,这两个事件相互干扰,focusout
事件的注册速度比onclick
事件快,因此在用户单击任何标记之前,focusout
函数会清空菜单
我知道我应该使用Jquery的$(选择器)。单击,但我不确定如何在迭代过程中做到这一点
如何对这些onclick
事件进行优先级排序?这样,focusout
函数只执行一次onclick
谢谢大家! 可以尝试.blur
而不是.focusout
.blur
支持正常事件流的事件冒泡。为了点击某个东西,另一个元素首先失去焦点。提供一个。您可能想将事件侦听器放在文档上,并检查其内部的目标,为了标记,您可以尝试使用Jquery插件:@Sagivb.g不幸的是.blur
不起作用。@charlietfl是的,我已经考虑过该解决方案了。它成功了,谢谢!