Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jquery事件函数之前,等待onclick事件完成_Javascript_Jquery_Html - Fatal编程技术网

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是的,我已经考虑过该解决方案了。它成功了,谢谢!