Javascript 使用JQuery UI对话框从确认对话框返回值

Javascript 使用JQuery UI对话框从确认对话框返回值,javascript,jquery,html,jquery-ui,Javascript,Jquery,Html,Jquery Ui,我使用在单击按钮时显示确认对话框。我想在单击OK时返回true,否则返回false 将对话框打开调用关联到onClick(如给定,$dialog.dialog('open');)事件中不起作用。因此,作为一种解决方法,我采用了一种类似于以下内容的方法:。这种方法与我的方法有两个区别: 该示例使用锚定标记和 它不使用jQuery UI对话框 我已经修改了示例链接中给出的代码,但它不起作用。我不知道我做错了什么。有没有更便宜的方法 下面是代码,所有CSS/JS都引用jQuery CDN,因此您应该能

我使用在单击按钮时显示确认对话框。我想在单击OK时返回
true
,否则返回
false

将对话框打开调用关联到
onClick
(如给定,
$dialog.dialog('open');
)事件中不起作用。因此,作为一种解决方法,我采用了一种类似于以下内容的方法:。这种方法与我的方法有两个区别:

  • 该示例使用锚定标记和
  • 它不使用jQuery UI对话框
  • 我已经修改了示例链接中给出的代码,但它不起作用。我不知道我做错了什么。有没有更便宜的方法

    下面是代码,所有CSS/JS都引用jQuery CDN,因此您应该能够复制代码以查看行为

    
    控制面板
    发动热核战争
    你就要发动战争了。
    单击“确定”确认。单击“取消”取消此操作

    $('#id2')。单击(函数(事件){ if($(this).data('propagationStopped')){ //警报(“真”); $(this).data('propagationStopped',false); 返回true; }否则{ 事件。stopImmediatePropagation(); $('#id3')。对话框({ //自动打开:错误, 宽度:600, 按钮:{ “Ok”:函数(){ $(此).dialog(“关闭”); $('#id2')。数据('propagationStopped',true); $('#id2').triggerHandler(事件); }, “取消”:函数(){ $(此).dialog(“关闭”); 返回false; } } }); //警报(“假”); 返回false; } });


    澄清:请注意,提交表单非常简单(请参阅)。我想在这里做的是通过点击按钮来模拟提交。更像JavaScript的方法

    您的代码有点复杂,我认为有一种更简单的方法可以做到这一点。您应该首先实例化对话框,然后在按钮的单击事件中打开它。代码看起来与此类似:

    <script>
    $(document).ready(function () {
      var $myDialog = $('<div></div>')
        .html('You are about to start a war.<br/>Click OK to confirm.  Click Cancel to stop this action.')
        .dialog({
        autoOpen: false,
        title: 'Why so serious?',
        buttons: {
          "OK": function () {
            $(this).dialog("close");
            window.open('http://google.com/');
            return true;
          },
          "Cancel": function () {
            $(this).dialog("close");
            return false;
          }
        }
      });
    
      $('#myOpener').click(function () {
        return $myDialog.dialog('open'); //replace the div id with the id of the button/form
      });
    });
    </script>
    
    <div id="myOpener"></div>
    
    
    $(文档).ready(函数(){
    变量$myDialog=$('')
    .html('您即将启动战争。
    单击“确定”确认。单击“取消”停止此操作。') .对话({ 自动打开:错误, 标题:“为什么这么严肃?”, 按钮:{ “OK”:函数(){ $(此).dialog(“关闭”); 打开窗户http://google.com/'); 返回true; }, “取消”:函数(){ $(此).dialog(“关闭”); 返回false; } } }); $('#myOpener')。单击(函数(){ 返回$myDialog.dialog('open');//用按钮/窗体的id替换div id }); });
    以下是jQuery UI对话框API文档,您可以查看所有选项:


    JavaScript是异步的。呼吁

    $myDialog.dialog('open'); 
    
    不会阻塞,而是会立即返回

    相反,必须使用
    按钮中提供的事件回调

    这个近乎重复的例子很好:


    理想情况下,这个示例应该让您在“确定”时访问谷歌,然后关闭,在“取消”时不执行任何操作。我会尽量避免使用基于$(formName).submit()的显式解决方案。PS的可能重复我没有测试这段代码,只是编写了它,以便您能够了解如何解决这个问题,所以可能需要一些小的调整。是的,这段代码很好。我只想提交一份表格。。所以我要做的是将$('#formId').submit()放在window.open(');在你的回答中。但问题是我想通过点击按钮来模拟提交。我意识到问题可能不清楚,我在问题中补充澄清。谢谢你的建议。@Nishant:我不太清楚你说的“点击按钮模拟提交”是什么意思。您的意思是希望在有人单击“确定”时停止提交事件的发生吗?我想我只是想请你详细说明“模拟提交”的含义,你能提供一个相关的用例吗?不,事实上$myDialog.dialog('open');只显示确认div并返回true。JavaScript确认函数等待用户的响应,并根据用户单击的内容返回布尔值。您的解决方案将显示一个对话框并立即提交。这就是原因,我经历了更艰难的过程:捕获点击事件传播,然后使用triggerHandler重新启动事件。这个被接受的解决方案是错误的。请参阅我的答案以获得正确的解决方案。