#jquery
#jquery
Вопрос:
Я хочу знать, как проверить, отличается ли элемент от набора из нескольких элементов. В частности, основная функциональность этого заключается в том, чтобы скрыть элемент, не нажимая на эти элементы. Но, в то же время, он НЕ ДОЛЖЕН скрываться при нажатии на них.
Чат — единственный элемент, который это делает. Потому что в нем есть функция onClick.
Другими словами, он должен скрывать #chat при нажатии только на странице или в чате. Но он НЕ ДОЛЖЕН скрываться при нажатии на их дочерние элементы. Спасибо!
Я провел исследование и попробовал много разных способов, но пока не смог найти решение. Если я нажму на #chat_content, который находится внутри #chat, #chat исчезнет. Чат является родительским для этих элементов.
Метод is() возвращает true, если хотя бы один из этих элементов соответствует заданным аргументам. Итак, я ПОСТАВИЛ! чтобы провести различие.
$(window).click(function (e){
var targ=$(e.target);
if(!targ.is("#chat, #chat_content, #mensajes, .online, .usuarios_online, .mensajes, #usuarios_chat, #usuarios_personal_chat")){
$("#chat_content").fadeOut("slow");
$("#mensajes").css("margin-top","3px");
}
})
function open_chat(){
if($("#chat_content").is(":hidden")){
$("#chat_content").fadeIn("slow");
$("#mensajes").css("margin-top","0px");
}else{
$("#chat_content").fadeOut("slow");
$("#mensajes").css("margin-top","3px");
}
}
<div id='chat' onClick='open_chat()'>
<div id='chat_content'>
<div id='usuarios_chat' onClick='open_personal_chat()'>
<p class='p_usuarios'><img
src='Zona_Contenido/Empresa/Logo_Empresa/" . $logo_empresa_chat . "'
class='logo_chat'/><span class='usuario_chat'></span><img
src='Zona_Contenido/Empresa/Image/Online.svg' class='online_chat'/> .
</p></div><div id='usuarios_personal_chat'></div>
</div>
<p id='mensajes'><img
src='Zona_Contenido/Empresa/Image/Online.svg' class='online'/><span
class='mensajes'>Chat</span><span class='usuarios_online'></span></p>
</div>
Комментарии:
1. Можете ли вы предоставить некоторый связанный HTML-код.
2. предоставьте HTML-код для лучшего понимания вашего макета
3. Да! Вот так! HTML-код генерируется с помощью PHP.
4. Итак, вы хотите исключить
#chat
и ВСЕ его дочерние элементы из этого обработчика щелчков, верно?
Ответ №1:
Я бы установил обработчик щелчков следующим образом:
$(window).click(function(){
$("#chat_content").fadeOut("slow");
$("#mensajes").css("margin-top","3px");
});
Таким образом, он будет срабатывать при кликах, сделанных в любом месте страницы… Чего вы, похоже, хотите.
Теперь, чтобы исключить #chat
и его потомков из вышеупомянутого обработчика щелчков, я бы попробовал event.stopPropagation()
:
$("#chat").click(function(e){
e.stopPropagation();
});
Таким образом, щелчок, сделанный на #chat
, и любые потомки не будут всплывать до window
.
Комментарии:
1. Также хорошее решение! Но я считаю более удобным использовать через target, поскольку мне назначено больше случаев в проекте 🙂 Рад услышать разные точки зрения!
Ответ №2:
Я нахожу решение с небольшой ретушью. Основная проблема заключалась в том, что я забыл добавить другие классы, которые находятся внутри #usuarios_chat, такие как .p_usuarios, .logo_chat, .usuario_chat среди них. Действительно, я думал о модульности, чтобы выяснить, что было причиной того, что не работало должным образом xD.
Итак, это окончательный код: потому что это приводило к исчезновению везде, где я нажимаю внутри элемента #chat. Я должен проверить это (ширина …) или если наследует другим 😕 функция open_chat(){
if($("#chat_content").is(":hidden")){
$("#chat_content").fadeIn("slow");
$("#mensajes").css("margin-top","0px");
}/*else {
$("#chat_content").fadeOut("slow");
$("#mensajes").css("margin-top","3px");
}*/
}
$(window).click(function (e){
var targ=$(e.target);
if(!targ.is("#chat, #chat_content, #mensajes, .online, .usuarios_online, .p_usuarios, .logo_chat, .usuario_chat, .mensajes, #usuarios_chat, #usuarios_personal_chat")){
$("#chat_content").fadeOut("slow");
$("#mensajes").css("margin-top","3px");
}
})