javascript - 在现有隐藏功能中添加 jQuery 删除确认框

标签 javascript jquery

我正在使用隐藏功能,它允许我隐藏页面中的多个元素。

隐藏框是这样的:

<div class="box">
  <a href='javascript:setHide("Element_1")' class="button element_hide">Hide Box 1</a>
</div>
<div class="box">
  <a href='javascript:setHide("Element_2")' class="button element_hide">Hide Box 2</a>
</div>

而 js 是:

    $('.element_hide').click(function() {
      $(this).closest('.box').hide(300);
    });
    function setHide(ObjID) {
      if (window.XMLHttpRequest) {
        xmlhttp=new XMLHttpRequest();
      } else {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
      var p_str = "p="+ObjID;
      xmlhttp.open("POST","/hide/",true);
      xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
      xmlhttp.send(p_str);
    }

现在我想添加一个确认框;如果我点击“隐藏框链接”,我想显示以下消息:“你真的要隐藏框吗?”。所以我尝试将 js 部分更改为:

    $('.element_hide').click(function() {
      $(this).closest('.box').hide(300);
    });
    function setHide(ObjID) {
        if (confirm("Do you really want to hide the box?")) {
          if (window.XMLHttpRequest) {
            xmlhttp=new XMLHttpRequest();
          } else {
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
          var p_str = "p="+ObjID;
          xmlhttp.open("POST","/hide/",true);
          xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
          xmlhttp.send(p_str);
        }
    }

但不幸的是,它不起作用,因为即使我点击“取消”(在确认框中),该框仍然消失。

有什么想法吗?非常感谢!

最佳答案

这是因为您有两个单独的事件处理程序用于隐藏和确认,而用于隐藏的事件处理程序始终运行。第一个事件使用 href='javascript:setHide("Element_1")' 设置,第二个事件使用 jQuery 的 $('.element_hide').click 设置。

将所有内容移动到通用处理程序中:

$('.element_hide').click(function() {
  if (confirm("Do you really want to hide the box?")) {
    var xmlhttp

    if (window.XMLHttpRequest) {
      xmlhttp = new XMLHttpRequest();
    } else {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    var ObjID = $(this).data('hide');
    var p_str = "p=" + ObjID;
    xmlhttp.open("POST", "/hide/", true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.send(p_str);

    $(this).closest('.box').hide(300);
  }
});

HTML 部分将变为:

<div class="box">
  <a data-hide="Element_1" class="button element_hide">Hide Box 1</a>
</div>
<div class="box">
  <a data-hide="Element_2" class="button element_hide">Hide Box 2</a>
</div>

请注意,如何使用数据属性 (data-hide="Element_1") 将 ObjID 传递给事件处理程序。

关于javascript - 在现有隐藏功能中添加 jQuery 删除确认框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48405233/

相关文章:

javascript - 反转(翻转)二维数组JS

jquery - 将 jQuery 插件集成到 NextJS

javascript - jQuery asp.net,停止回发

javascript - 如何从其他浏览器重定向到 IE?

javascript - iOS Safari 上的 console.time()

javascript - 为什么我的 SVG 的填充颜色在悬停时没有改变?

c# - 在 asp.net MVC 操作中单击弹出窗口打开 View

javascript - Jquery 滚动动画滚动到 div 的底部而不是顶部

jquery - DataTables 如何仅显示日期而不显示日期时间

javascript - 我想访问 javascript 函数内的输入字段,其 id 是使用 php 代码生成的