2013-04-26 91 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

相关问题