2013-04-26 68 views
2

我研究這個問題,我可以找到一個解決方案添加/刪除一個類的div我點擊,但不是一個單獨的div,例如jQuery:單擊一個元素,並添加一個類到一個div,點擊它,並刪除類

單擊.search-bar ....類中的輸入,並向一個名爲.search-wrap的div添加一個類...單擊頁面上其他任何位置/ off元素,它將刪除添加到.search的類-包。

我已經試過這樣:

$("div.search-bar").click(function(){ 
    $("div.search-wrap").addClass("white"); 
}); 

任何想法嗎?

+1

你說的點擊輸入,並使用'$( 「div.search條」)' ...可以顯示你的html嗎? – romainberger 2013-04-26 12:15:50

+0

請同時發佈HTML標記.. – 2013-04-26 12:18:30

回答

4
$('html').click(function() { 
    $("div.search-wrap").removeClass("white"); 
}); 

$("div.search-bar").click(function(event){ 
    event.stopPropagation(); 
    $("div.search-wrap").addClass("white"); 
}); 

如果你點擊div.search-baraddClass被調用,但該事件不會冒泡達body。 任何其他點擊頁面將調用html的點擊處理程序,並刪除類。

+0

鑑於'body'包含div'.search-wrap',您可能需要爲您的body點擊函數添加一個「.not('。search-wrap')」每個問題。 – Mysteryos 2013-04-26 12:19:33

+0

這似乎對我很好,非常感謝你:) – Codesworth 2013-04-26 12:23:43

+1

我會改善這個答案(這是沒有錯,但...)導致**每次點擊**後,會冒泡到'html '元素,而不是搜索'class'元素並刪除類。這是做這件事的最好方法嗎? ** NO ** – 2013-04-26 12:44:18

0

而且使用的focusIn()事件的內容()

當您輸入有它添加的類別,而當他失去它,刪除類...你怎麼想?

$("div.search-bar").focusin(function(){ 
    $("div.search-wrap").addClass("white"); 
}); 

休息:

$("div.search-bar").focusout(function() { 
    $("div.search-wrap").removeClass("white"); 
}); 
2

你需要改變風格,僅聚焦狀態,完成編輯後恢復默認狀態

你不需要使用click事件 - 這是不恰當的方式。

我認爲你應該使用focusblur

Ofcause你可以在每次上docuemnt或正文中添加事件,但這個事件會觸發當你點擊鏈接,按鈕等

0

單程

$(".search-bar").on("click", function(e) { $(".search-wrap").addClass("white"); }); 
$(".search-wrap").siblings().on("click", function() { $(".search-wrap").removeClass("white"); }); 
$(".search-wrap").siblings().parents().on("click", function() { $(".search-wrap").removeClass("white"); }); 

另一種方式

$(".search-bar").on("click", function(e) { $(".search-wrap").addClass("white"); }); 
$("body, body *").not(".search-wrap, .search-wrap *").on("click", function() { $(".search-wrap").removeClass("white"); }); 

都與自己的優點和缺點,即響應較慢的系統和可能的HTML佈局

的速度,如果你能使用輸入在div,最好的辦法是:

$(".search-bar input").on("focus", function(e) { $(".search-wrap").addClass("white"); }) 
.on("blur", function(e) { $(".search-wrap").removeClass("white"); }); 
0
$(".search-bar").click(function() { 
    event.stopPropagation(); 
    $("div.search-wrap").addClass("white"); 
}); 

$(document).on("click", function() { 

    $("div.search-wrap").removeClass("white"); 
}); 

JS FIDDLE LINK

0
$('div.search-bar').click(function() { 
    $('div.search-wrap').addClass('white'); 
}); 
$('*:not(.search-bar)').click(function() { 
    $('div.search-wrap).removeClass('white'); 
}); 
2

jsBin demo

$(".search-bar").on('focus blur', function(e){ 
    $(".search-wrap").toggleClass("white"); 
}); 

jsBin demo - Using DIV

$(".search-bar").on('click', function(e){ 
    e.stopPropagation(); 
    $(".search-wrap").addClass("white"); 
}); 
$(document).on('click', function(e){ 
    if(e.target.className!="search-bar") 
    $(".search-wrap").removeClass("white"); 
}); 
+0

這是更好的選擇,依靠'$(「html」)'不穩定,因爲被點擊的元素在html標籤內,無論如何,我都是從'div'的角度講的,但是你已經毀了刪除該部分是一個很好的答案? – Pogrindis 2015-05-12 15:27:08

相關問題