简体   繁体   English

如果另一个div已打开,则如何隐藏div使用javascript

[英]How hide div if another div is open use javascript

i have div like this use javascript : 我有这样的div使用javascript:

<script>
$(document).ready(function(){
    $("#btnmsg-1").click(function(){
        $(".msgid-1").show();
    });
    $("#btnmsg-2").click(function(){
        $(".msgid-2").show();
    });
    $("#btnmsg-3").click(function(){
        $(".msgid-3").show();
    });
    $("#btnmsg-4").click(function(){
        $(".msgid-4").show();
    });
});
</script>

<div>NAME : ABCDEF <button id="btnmsg-1">message</button></div>
    <div class="msgid-1" style="display:none;"><textarea></textarea><input type="submit" name="btnsend" value="Send"></div>
<div>NAME : GHIJKL <button id="btnmsg-2">message</button></div>
    <div class="msgid-2" style="display:none;"><textarea></textarea><input type="submit" name="btnsend" value="Send"></div>
<div>NAME : MNOPQR <button id="btnmsg-3">message</button></div>
    <div class="msgid-3" style="display:none;"><textarea></textarea><input type="submit" name="btnsend" value="Send"></div>
<div>NAME : STUVWX <button id="btnmsg-4">message</button></div>
    <div class="msgid-4" style="display:none;"><textarea></textarea><input type="submit" name="btnsend" value="Send"></div>

if i click button id="btnmsg-1" then div class="msgid-1" show, and then i click button id="btnmsg-3" then div class="msgid-3" show but div class="msgid-1" not hide or close,my question how hide the div if another div is open? 如果我单击按钮id =“ btnmsg-1”,然后显示div class =“ msgid-1”,然后我单击按钮id =“ btnmsg-3”,然后显示div class =“ msgid-3”,但div class =“ msgid -1“不隐藏或关闭,我的问题是如果另一个div打开,如何隐藏div?

Instead of using separate handlers for each, you can use the related positioning of the elements along with classes to group them to show/hide 您可以使用元素的相关位置以及类来对它们进行分组以显示/隐藏,而不必为每个元素使用单独的处理程序。

ie, Add a class like btnmsg to all the buttons and msgedit to all the div's that have to be shown/hidden. 即,将btnmsg类的类添加到所有必须显示/隐藏的div中,将msgedit到所有div中。 Now register a click handler to .btnmsg elements, from your markup the .msgedit element to be shown is the next sibling of the clicked button so show that then hide all other .msgedit elements. 现在,向.btnmsg元素注册一个单击处理程序,从您的标记中显示的.msgedit元素是该单击按钮的下一个同级.msgedit ,以便显示然后隐藏所有其他.msgedit元素。

 $(document).ready(function() { var $edits = $('.msgedit') $(".btnmsg").click(function() { var $this = $(this).parent().next().show(); $edits.not($this).hide() }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div>NAME : ABCDEF <button class="btnmsg" id="btnmsg-1">message</button> </div> <div class="msgid-1 msgedit" style="display:none;"> <textarea></textarea> <input type="submit" name="btnsend" value="Send" /> </div> <div>NAME : GHIJKL <button class="btnmsg" id="btnmsg-2">message</button> </div> <div class="msgid-2 msgedit" style="display:none;"> <textarea></textarea> <input type="submit" name="btnsend" value="Send" /> </div> <div>NAME : MNOPQR <button class="btnmsg" id="btnmsg-3">message</button> </div> <div class="msgid-3 msgedit" style="display:none;"> <textarea></textarea> <input type="submit" name="btnsend" value="Send" /> </div> <div>NAME : STUVWX <button class="btnmsg" id="btnmsg-4">message</button> </div> <div class="msgid-4 msgedit" style="display:none;"> <textarea></textarea> <input type="submit" name="btnsend" value="Send" /> </div> 

Please add same classes to similar elements, and then use this jQuery code instead: 请向相同的元素添加相同的类,然后使用以下jQuery代码:

$(document).ready(function(){
    $(".btnmsg").click(function(){
        $(".msgid").hide();
        $(this).parent().next(".msgid").show();
    });
});

See the complete DEMO working: https://jsfiddle.net/lmgonzalves/n5f78kqs/ 请参阅完整的DEMO工作: https//jsfiddle.net/lmgonzalves/n5f78kqs/

jsBin demo jsBin演示

  • don't use msgid-1 , msgid-2 etc... cause it defeats the purpose of classNames. 不要使用msgid-1msgid-2等...,因为它违反了classNames的目的。 Use only msg 仅使用msg
  • Same goes for your buttons. 您的按钮也一样。 Remove the buttons IDs. 删除按钮ID。 use Class class="btn" 使用Class class="btn"
  • Don't use inline styles. 不要使用内联样式。 Use <style> instead or call-to an external stylesheet. 改用<style>或调用外部样式表。

HTML 的HTML

<div class="btn">
  NAME : ABCDEF <button>message</button>
</div>
<div class="msg">
  <textarea></textarea>
  <input type="submit" name="btnsend" value="Send">
</div>

CSS: CSS:

.msg{
  display:none;
}

See how more readable is now your code? 看看您的代码现在更具可读性了吗?
jQuery: jQuery的:

var $msg = $(".msg");                                       // Get all .msg DIVs
$(".btn").on("click", "button", function( e ){
    $msg.hide();                                            // Hide all
    $(e.delegateTarget).next().show();                      // Show next
});

You can do this by calling hide() on the elements you would like to hide. 您可以通过对要隐藏的元素调用hide()来实现。

For example, you would make the following change: 例如,您将进行以下更改:

// Old
$("#btnmsg-1").click(function(){
    $(".msgid-1").show();
});

//New
$("#btnmsg-1").click(function(){
    $(".msgid-1").show();
    $(".msgid-2").hide();
    $(".msgid-3").hide();
    $(".msgid-4").hide();
});

A cleaner way to do this would be to give all of your messages a "message" class, then your onClick handlers would look like this: 一种更清洁的方法是为您的所有消息提供“消息”类,然后您的onClick处理程序将如下所示:

$("#btnmsg-1").click(function(){
    $("#message").hide();
    $(".msgid-1").show();
});

Hope that helps! 希望有帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM