2011-07-27 47 views
1

我試圖改善以下腳本一點:刪除類的任何地方,除非某個文本框上點擊

$(document).click(function(event) { 
    $('.home.active').click(); 
    $('.home').removeClass("active"); 
}); 

這工作,但它工作的時候,我不希望它的工作。例如,我有一個文本框。如果該文本框獲得焦點,則不應刪除該類,但如果單擊頁面上的其他任何內容,則該類應該被刪除。所以我嘗試以下,這不工作:

$(document).click(function(event) { 
    if($('#txtHomeSearch').focus()) { 
     // don't remove class 
    } else { 
     $('.home.active').click(); 
     $('.home').removeClass("active"); 
    } 
}); 

這將停止類是完全刪除,不管我在哪裏點擊,然後將文本框總是具有焦點。

回答

4

您可以使用event.target確定點擊的元素的id

$(document).click(function(event) { 
    if (event.target.id === "txtHomeSearch") { 
     // Don't remove class. 
    } else { 
     $('.home.active').click(); 
     $('.home').removeClass("active"); 
    } 
}); 
0

使用

$(document).click(function(event) { 
    if(event.target.id == 'txtHomeSearch') 
     return; 

    $('.home.active').click(); 
    $('.home').removeClass("active"); 

}); 

無論$('.home.active').click();確實,可能會搞砸了。

0

你可以找到使用target財產事件的來源。

if ($(event.target).prop('id') == 'txtHomeSearch') { 
    //don't remove class 
} 
0

您可以試試。您可能需要從#txtHomeSearch中刪除#我記不起我的頭頂。

$(document).click(function(event) { 
    if($(this).attr('id') == '#txtHomeSearch') { 
     // don't remove class 
    } else { 
     $('.home.active').click(); 
     $('.home').removeClass("active"); 
    } 
}); 
+0

你必須放棄它 – mrBorna

0

您可以使用event.target屬性來交叉檢查元素。 問題是你的if($('#txtHomeSearch').focus()) ......這不是檢查它是否在焦點,它給予焦點。

選擇聚焦元素,你可以使用jQuery的(1.6):focus選擇,使用$(document.activeElement)以供將來參考