2011-10-22 16 views
2

我有兩個聲明。我試圖做的是當有人點擊#area_a然後隱藏整個#area_b div 沒有激活focusout#area_b_textbox。但我已經嘗試了不同的代碼(我不在這裏,因爲它不正確,希望得到你的建議),並且發生了什麼,它是激活focusout每次我點擊#area_a股利。如果else語句爲javascript點擊事件

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> 

謝謝!

+0

將焦點重新設置在處理程序中;最好你可以做 - 如果你點擊某個東西,你會失去其他東西的焦點。 –

回答

1

你可以用計時器來解決問題。定時器通常聞起來不好,但我認爲這是你最安全的選擇。如果您嘗試使用懸停或其他鼠標事件,則可能會遇到鍵盤導航和激活問題,或觸摸界面上沒有「懸停」事件(並且我們無法假裝這些事件不再存在)。

事情是這樣的:

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超時玩了一下,看看有什麼效果最好你的情況。

+0

殘疾人如何,他們可以用很長的時間來達到按鈕,或者如果area_a在網站上完全不同的位置...我不認爲這是一個解決方案更好 – meo

+0

@meo:定時器在'