是否可以使用JQuery的模态确认框?

One*_*erd 32 javascript jquery modal-dialog

看了很多,似乎无法找到一个JQuery解决方案(可能只是JavaScript的限制):

<a href="somelink.php" 
   onclick="return confirm('Go to somelink.php?');">Click Here</a>
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,当用户单击链接时,如果用户在确认框中单击"确定",则只会转到其href.

我想要做的是使用弹出式div获得更现代的外观.也许是这样的:

<a href="somelink.php" 
   onclick="return jq_confirm('Go to somelink.php?');">Click Here</a>
Run Code Online (Sandbox Code Playgroud)

(其中jq_confirm是一个自定义的JQuery确认函数,弹出一个带有YES/NO或OK/CANCEL按钮对的漂亮div).

但是,我似乎找不到任何这样的东西.

我已经查看了一些提供类似功能的JQuery小部件库等,但是没有人会等待用户的响应(至少,不是在上面描述的场景中),而是他们只是继续并将用户带到链接(或者运行嵌入在href =''链接片段中的任何JavaScript.我怀疑这是因为虽然您可以将回调函数附加到许多这些小部件以返回true/false值,但onclick事件不会等待响应(回调是异步的),从而破坏了确认框的目的.

我需要的是默认confirm()命令提供的相同类型的halt-all-javascript(模态)功能.这在JQuery(甚至是JavaScript)中是否可行?

因为我不是JavaScript和JQuery的专家,所以我会向你推荐专家.任何JQuery(甚至是纯JavaScript)解决方案都是受欢迎的(如果可能的话).

谢谢 -

Pau*_*rie 21

我只需要解决同样的问题.我结束了使用JQuery UI中dialog小部件.我能够在不使用回调的情况下实现这一点,必须在事件处理程序中为要使用确认功能的链接部分初始化(如果要将其用于多个链接).这是因为必须将链接的目标URL注入事件处理程序以进行确认按钮单击. dialogclick

这是我的解决方案,抽象出来以适合一个例子.我使用CSS类来指示哪些链接应该具有确认行为.

<div id="dialog" title="Confirmation Required">
  Are you sure about this?
</div>

<script type="text/javascript">
  $(document).ready(function() {
    $("#dialog").dialog({
      autoOpen: false,
      modal: true
    });

  $(".confirmLink").click(function(e) {
    e.preventDefault();
    var targetUrl = $(this).attr("href");

    $("#dialog").dialog({
      buttons : {
        "Confirm" : function() {
          window.location.href = targetUrl;
        },
        "Cancel" : function() {
          $(this).dialog("close");
        }
      }
    });

    $("#dialog").dialog("open");
  });




  }); // end of $(document).ready


</script>

<a class="confirmLink" href="http://someLinkWhichRequiresConfirmation.com">Click here</a>
<a class="confirmLink" href="http://anotherSensitiveLink">Or, you could click here</a>
Run Code Online (Sandbox Code Playgroud)

  • 我想知道为什么这个解决方案被接受了(12个赞成).OP问题的答案是:没有这样的东西可以阻止所有javascript处理,如确认.令人惊讶的接受的解决方案(我猜)可能随机执行一些onclick事件,如果有的话.可能还取决于浏览器.整个确认对话框替换似乎没有干净的解决方案. (11认同)

jan*_*ann 8

查看http://www.84bytes.com/2008/06/02/jquery-modal-dialog-boxes/

他们有各种各样的JQuery模式框.

我想你应该看到http://www.ericmmartin.com/simplemodal/

JavaScript确认函数的模态对话框覆盖.演示如何使用onShow以及如何显示模式对话框确认,而不是默认的JavaScript确认对话框.

  • 我评估了相同的代码,但它对我描述的场景不起作用.问题是,我有数百个这样的confirm()代码通过我描述的编码网站,而宁愿只用jq_confirm做一个简单的替换 - > confirm(),而不是在数百页内仔细重新编码所有href和onclick代码(如果可能,那就是). (4认同)

Rus*_*Cam 7

你有没有在jQuery UI网站上看到jQuery Modal Dialog

  • 亲爱的RussCam:它显示了一个可以按下某些按钮的方框 - 但这不是OP所要求的.他要求使用javascript来停止事件执行,直到确认/取消.公认的解决方案(12票上涨)是邪恶的.显示停止是imho,你基本上打破并丢弃所有点击事件和bam重定向到其他地方.其次想象OP决定在提交按钮上使用确认.拿一把大剑砍掉所有地方的所有活动以确认箱子?干净的解决方案怎么样? (3认同)
  • 这并不能解决确认问题 (2认同)

Mar*_*off 6

我在这里写了关于这个问题的解决方案的博客:http://markmintoff.com/2011/03/asp-net-jquery-confirm-dialog/

即使该文章面向ASP.Net,它也可以很容易地适应php.它依赖于防止点击返回false并且当用户点击"OK"或"YES"或者你有什么时; 只需再次点击链接或按钮即可.

var confirmed = false;
function confirmDialog(obj)
{
    if(!confirmed)
    {
        $( "#dialog-confirm" ).dialog({
            resizable: false,
            height:140,
            modal: true,
            buttons: {
                "Yes": function()
                {
                    $( this ).dialog( "close" );
                    confirmed = true; obj.click();
                },
                "No": function()
                {
                    $( this ).dialog( "close" );
                }
            }
        });
    }

    return confirmed;
}
Run Code Online (Sandbox Code Playgroud)

试一试,让我知道你的想法.我希望这能解决你的问题.