if if语句为javascript点击事件

时间:2011-10-22 20:43:10

标签: javascript jquery

我有两个陈述。我想要做的是当有人点击#area_a然后隐藏整个#area_b div 而不激活focusout的{​​{1}}。但是我尝试了不同的代码(我不在这里,因为它不正确,想要得到你的建议),而且每次点击#area_b_textbox div时都会激活focusout

JQuery基本动作

#area_a

HTML:

$("#area_a").click(function() { $("#area_b").hide(); });

$("#area_b_textbox").focusout(function() {$("#area_b_error").show();});

谢谢!

4 个答案:

答案 0 :(得分:1)

这是不可能的,因为当你点击其他地方时自动松开焦点......

您需要做的是在#area_a悬停时取消绑定焦点事件并稍后重新绑定...

$("#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:你的终极目标是什么?

答案 1 :(得分:1)

为什么不添加一个标志来忽略下一个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事件。

答案 2 :(得分:1)

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

这样的事情:

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超时,看看在你的情况下什么效果最好。

答案 3 :(得分:0)

我不确定这是否可行,因为根据定义,如果用户要点击按钮,焦点必须留下#area_b_textbox。