如果javascript的else语句点击事件

If else statement for javascript click event

本文关键字:句点 事件 语句 else javascript 如果      更新时间:2023-09-26

我有两个语句。我要做的是,当有人点击#area_a,然后隐藏整个#area_bdiv ,而没有激活#area_b_textboxfocusout。但我已经尝试了不同的代码(我不包括在这里,因为它是不正确的,想要得到你的建议)和正在发生的事情是它是激活focusout每次我点击#area_adiv。

JQuery基本动作

$("#area_a").click(function() { $("#area_b").hide(); });
$("#area_b_textbox").focusout(function() {$("#area_b_error").show();});
HTML:

<div id="area_a"></div>
<div id="area_b">
  <input id="area_b_textbox">
  <div id="area_b_error"></div>
</div>

谢谢!

您可以使用计时器来解决这个问题。计时器通常很难闻,但我认为这是你最安全的选择。如果你尝试使用鼠标悬停或其他鼠标事件,你可能会遇到键盘导航和激活的问题,或者在触摸界面上缺乏"悬停"事件(我们不能假装这些不再存在)。

像这样:

var timer_kludge = {
    start: function(fn) {
        this.id = setTimeout(fn, 200);
    },
    stop: function() {
        if(this.id)
            clearTimeout(this.id);
        this.id = null;
    },
    id: null
};
$('#area_a').click(function() {
    timer_kludge.stop();
    $('#out').append('<p>click</p>');
});
$('#area_b_textbox').focusout(function() {
    timer_kludge.start(function() {
        $('#out').append('<p>textarea focusout</p>');
    });
});
$('#area_b_textbox').focusin(function() {
    timer_kludge.stop();
});

演示:http://jsfiddle.net/ambiguous/s8kw8/1/

您可能需要稍微使用一下200超时,看看哪种方法最适合您的情况。

为什么不直接添加一个标志来忽略下一个focusout (blur?)事件

ignoreNextFocus = false;
$("#area_a").click(function() { ignoreNextFocus=true; $("#area_b").hide(); });
$("#area_b_textbox").focusout(function() { if(!ignoreNextFocus)$("#area_b_error").show();ignoreNextFocus=false;});

在点击事件上设置标志可能太晚了。如果是这种情况,尝试mousedown事件

这是不可能的,因为当你点击其他地方时,你会自动失去焦点…

你需要做的是取消对#area_a悬停时的focusout事件的绑定,并在稍后重新绑定它…

$("#area_a").click(function() { 
   $("#area_b").hide()
}),hover(
  function(){
    $("#area_b_textbox").unbind("focusout")
  },
  function(){
    $("#area_b_textbox").focusout(function() {$("#area_b_error").show();});
  }
)
PS:你的最终目标是什么?

我不确定这是可能的,因为根据定义,如果用户要单击按钮,焦点必须离开#area_b_textbox