2012-08-09 215 views
0
$(document).ready(function() { 
    $(".btn-slide").focus(function() { 
     $("#moresearch").show("fast"); 
     $(".btn-slide").blur(function() { 
      $("#moresearch").hide("fast"); 
     }); 
    }); 
}); 

在此示例中.btn-slide是我的文本框。當它集中顯示moresearch股利。當它隱藏div div隱藏時。jquery show hide division

問題是,當我點擊moresearch股利,股利關閉,但它應該只在外面點擊時關閉。

+0

你能製作[小提琴](http://jsfiddle.net)嗎? – Inkbug 2012-08-09 09:51:28

回答

3

首先,你爲什麼要嵌套焦點和模糊事件綁定?這樣,每次'焦點'事件被觸發時,'模糊'都會受到約束(但它不會被解除綁定)。但這不是問題。

一個可能的解決方案是檢查模糊回調中焦點所在的元素。有關如何做到這一點的信息,請查看When onblur occurs, how can I find out which element focus went *to*?

也許這樣的事情:

$(".btn-slide").blur(function(event) { 
    var target = event.explicitOriginalTarget||document.activeElement; 
    if (target != $("#moresearch")[0]) { 
     $("#moresearch").hide("fast"); 
    } 
} 

編輯:或者說這個勢力中的伎倆:

if (!$("#moresearch").has($(target)) > 0 &&! $("#moresearch")[0] == target) 

這將檢查其中的焦點離開,這是否是目標股利或之一這是孩子。沒有嘗試過。

0

試試這個:

$(document).ready(function() { 
    $(".btn-slide").focus(function() { 
     $("#moresearch").fadeIn("fast"); 
     $('body').not('.btn-slide').click(function() { 
      $("#moresearch").fadeOut("fast"); 
     }); 
    }); 
}); 

注意:使用fadeIn()fadeOut,而不是顯示/隱藏,當你想要做的動作動畫。

+0

這將工作,但只有當輸入元素通過點擊其他地方。但是,如果通過按* tab *鍵留下,這不起作用,是嗎? – Remo 2012-08-09 09:54:07

+0

yeap,這將無法使用tab鍵..您的答案更穩固。 – 2012-08-09 09:54:55