javascript - 通过交换其内容在同一个 div 中请求确认?

标签 javascript jquery ajax dom-manipulation

我有以下 html:

<div class="modify">
    <a href="#" class="change" id="1">Change</a><br>
    <a href="#" class="delete" id="1">Delete</a>
</div>

和相应的 jQuery:

$(".delete").click(function(){

    var parent_element = $(this).closest('li');
    var url_string = $(this).attr('id') + '/delete/';

    $.ajax({
        type: 'POST',
        url: url_string,
        success: function(response) {
        parent_element.fadeOut(600, function() {
                parent_element.remove();
            });
        }
    });
});

现在我想在 .modify 中请求用户确认。当前的内容 .change.delete 应该消失并被替换成如下内容:

Are you sure?

Yes No

一般情况下是这样的:

Initial State

如果用户按下删除,内容应该像这样改变:

State after Delete was pressed.

您可能已经想到,如果用户选择

  • ,应该删除parent_element
  • .modify 应返回其原始状态

执行此操作的惯用方法是什么?

最佳答案

我根据您的补充说明修改了我的答案。

codepen live example

关于..

HTML

<div class="modify askState">
  <div class="ask">
    <a href="#" class="change" id="1">Change</a><br>
    <a href="#" class="delete" id="1">Delete</a>
  </div>
  <div class="confirm">
    <span class="confirmDeleteText">Are you sure?</span><br/>
    <a href="#" class="confirm confirmYes">Yes</a>
    <a href="#" class="confirm confirmNo">No</a>
  </div>
</div>

JS

var askState = true, modifyElement = $(".modify");

$(".delete").click(function(){

  askConfirmation();    
});

function askConfirmation() {
  toggleState();
}

$(".confirmYes").click(function() {
  var parent_element = $(this).closest('li');
    var url_string = $(this).attr('id') + '/delete/';

    $.ajax({
        type: 'POST',
        url: url_string,
        success: function(response) {
        parent_element.fadeOut(600, function() {
                parent_element.remove();
            });
        }
    });
});


$(".confirmNo").click(function() {
  toggleState();
});

function toggleState() {
  if( askState ) {
    modifyElement.  addClass("confirmState").removeClass("askState");
  } else {
    modifyElement.removeClass("confirmState").  addClass("askState");
  }
  askState = !askState;
}

CSS

.confirmState .ask {
  display: none;
}

.askState .confirm {
 display: none;
}

我添加了 HTML,这样原始文本就不会丢失(如果您执行 innerHTML=newText,那么如果不备份,您将无法正确恢复其 innerHTML)。

另请注意它的可读性:

  1. 如果我点击“删除”,然后询问确认(语义代码)。
  2. 如果我要求确认,然后更改状态(功能代码,用 toConfirmState() 代替 toggleState() 可能会很好)。
  3. (然后处于新状态)
    如果我点击“confirmYes”,然后执行代码(功能代码,可以很好地制作删除功能(语义代码))

关于javascript - 通过交换其内容在同一个 div 中请求确认?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19678651/

相关文章:

javascript - javascript中的elgamal解密

javascript - jQuery加载文本文件数据

javascript - 溢出-y : scroll causing issues with JQuery

JavaScript 看不到背景颜色?

javascript - 将动态创建的按钮拆分成行 Javascript/HTML

php - 如何从传入的 JSON 数据生成表 [Laravel、Ajax]

javascript - 数据以凌乱的方式加载到页面上

jquery - "Best"将 Django 与 Ajax 库集成的方法

javascript - 在生产模式 Javascript 上不会加载较少的文件

java - 使用 servlet、jquery、ajax、json 进行链式选择