javascript - 单击时隐藏 div - 多个框

标签 javascript jquery html css

我的信息提交表单有点长。我有一个选项,有人单击“添加另一个”,会显示一个通知框,其中显示“成功!”之类的文本。就像关闭按钮一样。请检查这张图片。

enter image description here

因此我有三个“添加另一个”按钮和三个成功警报。当有人单击关闭时,该警报消息需要消失。

问题

我为那个成功框使用了 javascript。它会做这些事情。

Click "Add another" button, appears success box.
Click close button on success box, box disappears.

这是我的代码。

document.querySelector(".add-box").addEventListener("click", function() {
  document.querySelector(".add-box-wrap").style.display = "inline-block";
});

document.querySelector(".add-box1").addEventListener("click", function() {
  document.querySelector(".add-box-wrap1").style.display = "inline-block";
});

document.querySelector(".add-box2").addEventListener("click", function() {
  document.querySelector(".add-box-wrap2").style.display = "inline-block";
});


$(".claim-btn-close").click(function() {
  $(".add-box-wrap").hide();
});

$(".claim-btn-close1").click(function() {
  $(".add-box-wrap1").hide();
});

$(".claim-btn-close2").click(function() {
  $(".add-box-wrap2").hide();
});

<!-- This goes end of html page -->
function hide(target) {
  document.getElementsByClassName(target).style.display = 'none';
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!--Success form-->
<div class="add-box-wrap">
  <div class="claim-btn-close" onclick="hide('.claim-btn-close')">
    <i class="fa fa-times" aria-hidden="true"></i>
  </div>
  <a href="" class="btn btn-primary claim-btn">Success!</a>
</div>

<!--Add another button -->
<div class="col-lg-10 col-md-10 col-sm-12 no-padding">
  <a class="add-box">Add another<i class="fa fa-plus"></i></a>
</div>

看.. 代码重复存在一个主要问题。 (我没有重复 html 代码,只是在这里发布一个例子)我想知道实现这样的事情的最佳实践。

最佳答案

要在不重复代码的情况下显示通知框,一种方法是您可以使用data 属性。更改所有按钮的 data 属性,并让类 .add-box 相同。像这样:

<div class="add-box-wrap1" style="display: none;">
  <div class="claim-btn-close">
    <i class="fa fa-times" aria-hidden="true"></i>
  </div>
  <a href="" class="btn btn-primary claim-btn">Success!</a>
</div>
<div class="add-box-wrap2" style="display: none;">
  <div class="claim-btn-close">
    <i class="fa fa-times" aria-hidden="true"></i>
  </div>
  <a href="" class="btn btn-primary claim-btn">Success!</a>
</div>

<!--Add another button -->
<div class="col-lg-10 col-md-10 col-sm-12 no-padding">
  <a class="add-box" data-target="1">Add another<i class="fa fa-plus"></i></a>
</div>

<!--Add another button -->
<div class="col-lg-10 col-md-10 col-sm-12 no-padding">
  <a class="add-box" data-target="2">Add another<i class="fa fa-plus"></i></a>
</div>

并将您的 Jquery 更改为只有一个函数

$(".add-box").click(function() {
  $(".add-box-wrap" + $(this).data('target')).show(); //.add-box-wrap1 or .add-box-wrap2 
});

上面一行的解释:这只是意味着我们正在获取“clicked”按钮的 data-target 值(1 或 2)和 < strong>将该值附加到“add-box-wrap”(将是 add-box-wrap1add-box-wrap2)以进行搜索使用 .show() 显示该元素。

Using show() or .css jquery functions is upto you. But I suggest not to mix both vanilla JS and JQuery codes(like in your question).

结束

您可以简单地使用closestparent,如下所示:

$(".claim-btn-close").click(function(){
    $(this).parent().hide();
});

$(".add-box").click(function() {
  $(".add-box-wrap" + $(this).data('target')).show();
});

$(".claim-btn-close").click(function(){
    $(this).parent().hide();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="add-box-wrap1" style="display: none;">
  <div class="claim-btn-close">
    <i class="fa fa-times" aria-hidden="true"></i>
  </div>
  <a href="" class="btn btn-primary claim-btn">Success!</a>
</div>
<div class="add-box-wrap2" style="display: none;">
  <div class="claim-btn-close">
    <i class="fa fa-times" aria-hidden="true"></i>
  </div>
  <a href="" class="btn btn-primary claim-btn">Success!</a>
</div>

<!--Add another button -->
<div class="col-lg-10 col-md-10 col-sm-12 no-padding">
  <a class="add-box" data-target="1">Add another<i class="fa fa-plus"></i></a> 
</div>

<!--Add another button -->
<div class="col-lg-10 col-md-10 col-sm-12 no-padding">
  <a class="add-box" data-target="2">Add another<i class="fa fa-plus"></i></a>
</div>

另一个问题的更新(3 列):

使用 Bootstrap ,您可以将 add-box-wrap div 包装在 .row 中,并为每个 div 指定一个类,如 col-*-4 (class="col-xs-4 col-md-4 col-lg-4") 假设您有 3 个成功按钮 (12/3 = 4)。所以你的 html 的第一部分将变成

<div class="row">
  <div class="add-box-wrap1 col-md-4 col-lg-4" style="display: none;">
    <div class="claim-btn-close">
      <i class="fa fa-times" aria-hidden="true"></i>
    </div>
    <a href="" class="btn btn-primary claim-btn">Success!</a>
  </div>
  <div class="add-box-wrap2 col-md-4 col-lg-4" style="display: none;">
    <div class="claim-btn-close">
      <i class="fa fa-times" aria-hidden="true"></i>
    </div>
    <a href="" class="btn btn-primary claim-btn">Success!</a>
  </div>
  <div class="add-box-wrap3 col-md-4 col-lg-4" style="display: none;">
    <div class="claim-btn-close">
      <i class="fa fa-times" aria-hidden="true"></i>
    </div>
    <a href="" class="btn btn-primary claim-btn">Success!</a>
  </div>
</div>

关于javascript - 单击时隐藏 div - 多个框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44901368/

相关文章:

javascript - 在一行代码中用扩展语法替换数组条目?

javascript - 无法将 JS 文件添加到我的 HTML 中

javascript - 为全屏网络应用程序使用 Apple 元标记

javascript - 为什么cookie没有被删除?

javascript - 如何从 jSon 对象构建数组

jquery - jQuery 实时点击事件的 event.target 错误

数字后的 HTML 列表文本缩进

javascript - 根据 AJAX 请求向行添加表类/删除表类

php - 如何使用 AJAX 在灯箱中加载内容,该内容取决于用户点击的触发器

javascript - 使用 document.querySelector ('.' ).style。改变一个 div 的 *两个* CSS 属性