2010-11-19 49 views
1

時,我有以下HTML:條件去除注重了

<input type="text" id="myText"> 
<div id="myDiv"> 

當用戶將焦點從文本字段,我想刪除#myDiv,只有當用戶集中出這是一個區域而不是在DIV本身。

到目前爲止,無論用戶點擊屏幕的哪個位置,我都有移除div的代碼。我需要添加到下面的代碼,以防止刪除的div,如果用戶點擊裏面呢?

$("#myText").focusout(function(evt) { 
    $("#myDiv").remove(); 
}); 
+1

你說的是一個點擊大概有焦點事件?這是不一樣的 – 2010-11-19 15:29:44

回答

2

這就是你要找的。當blur事件被觸發時,你可以訪問被聚焦的元素,然後你可以檢查元素的id以查看它是否與div上的id匹配。如果不匹配,則刪除div。

$("#myText").blur(function(e){  
    var target = e.originalEvent.explicitOriginalTarget||document.activeElement; 

    if ($(target).closest("#myDiv").length == 0 && target.id != "myDiv") 
    $("#myDiv").remove(); 
}); 

下面是一個簡單的例子,我把一起jsbin:http://jsbin.com/iwari3/10 讓我知道,如果這是你在找什麼

更新 由於原來的版本無法在Chrome中工作,我決定採取不同的方法,似乎在IE/FF/Chrome中工作。

var $myDiv = $("#myDiv"), 
    $myText = $("#myText"); 

$myText.blur(function(e){   
    if (!$myDiv.data("focused")) 
     $myDiv.remove(); 

    $myDiv.data("focused", false); 
}); 

$myDiv.mousedown(function(e){ 
    $(this).data("focused", true) 
}); 

這個新方法現在將焦點放在mousedown上的#myDiv上,它在blur事件之前被觸發。在文本框的模糊中,我們檢查是否設置了焦點位。然後將關注的位重置爲false,以處理多次點擊進入和退出文本框的情況。

這裏是一個更新的jsbin.com例如:http://jsbin.com/iwari3/11

+0

在Chrome中不起作用。 – 2010-11-19 16:01:43

+0

似乎它不適用於Chrome ... – Joel 2010-11-19 16:21:17

+0

我正在調查它。如果我找到Chrome的解決方案 – 2010-11-19 17:58:16

0

你可以有一個帶有標誌值的隱藏字段。

上點擊裏面的div設置的隱藏字段值爲1

你應該這樣做之前,你調用remove();

在調用div之前請檢查此標誌並刪除。

刪除未設置標誌後

+0

這是一個不錯的主意,但我怎樣才能保證Div的click()事件處理程序將在文本類型的focusout()之前被調用,以便它可以及時更改標誌? – Joel 2010-11-19 15:31:48

+0

@Matt我正在考慮在JS中存儲值,但是會有兩個函數,對變量的作用域很困惑。 var a = 0; func set(){a = 1} func unset(){a = 0}。將工作!!! – zod 2010-11-19 15:35:12

+0

@Joel嘗試使用onfocus和focusout – zod 2010-11-19 15:42:11