我正在尝试使用自动建议面板创建一个搜索框,如果用户在已经拥有焦点后点击搜索框,该面板就会关闭。我已经尝试检查$(“#search_box”)。是(“:focus”),并使用以下代码,两者都有同样的问题:
var fade_in=function() {
$("#search_panel").fadeIn(100);
};
$(document).ready(function() {
$("#search_panel").fadeOut(100);
$("#search_box").focus(function() {
$(this).on("click", fade_in);
});
$("#search_box").blur(function() {
$(this).off("click", fade_in);
$("#search_panel").fadeOut(100);
});
});
似乎事件的顺序使得搜索面板总是在第一次点击时出现 - 订单是:
而我希望它会:
在第二次单击时,面板应显示为输入框已经具有焦点。
以下是当前代码:http://jsfiddle.net/DtfYq/
答案 0 :(得分:2)
如果我理解正确的话,我相信下面的代码应该是您所追求的:
var toggle=function() {
$("#search_panel").fadeIn(100);
};
$(document).ready(function() {
$("#search_panel").fadeOut(100);
$("#search_box").on("click", function() {
if ($(this).is(':focus')) {
$(this).on("click", toggle);
} else {
$(this).focus();
}
});
$("#search_box").blur(function() {
$(this).off("click", toggle);
$("#search_panel").fadeOut(100);
});
});
我已修改它,以便在单击搜索框时,它会检查该元素是否具有焦点。如果是,则附加click
事件。否则,它只关注它。