Jqueryui的确认消息始终返回true

时间:2013-10-10 23:02:04

标签: javascript jquery-ui

我编写了一个名为confirmMessage(msg)的函数来处理链接的onclick事件:

<a href="delete.php?id=12" onclick="return confirmMessage('Are You REALLY Sure?')">Delete</a>

该功能的代码是:

<script>
    function confirmMessage(msg){
    p = true
    elementHtml = '<div id="ConfirmMessage">'+msg+'</div>';
    $("body").append(elementHtml);
    $("#ConfirmMessage").dialog({
      resizable: false,
      height:140,
      modal: true,
      buttons: {
        "Delete": function() {
        p = true;           
          $( this ).dialog( "close" );

        },
        Cancel: function() {
        p = false;
          $( this ).dialog( "close" );

        }
      }
    }

    );

    return p;

}

    </script>

在上面的函数中,我将变量p设置为case容器,即true或false,最初我将其设置为true。此外,消息元素即时创建。但是,当我点击删除链接时,它不会等到我决定删除或取消它然后去删除。

当我最初将p设置为false时,它不执行任何其他任何关闭对话框的决定。

此代码中的错误在哪里?!

3 个答案:

答案 0 :(得分:2)

你的错误在于认为函数在返回之前等待你点击其中一个按钮。 .dialog()显示对话框并立即返回。必须在回调函数中完成对用户交互的响应。

使用close:处理程序在对话框关闭时运行代码:

$("#ConfirmMessage").dialog({
  resizable: false,
  height:140,
  modal: true,
  close: function() {
    if (p) {
        ...
    } else {
        ...
    }
  },
  buttons: {
    "Delete": function() {
    p = true;           
      $( this ).dialog( "close" );

    },
    Cancel: function() {
    p = false;
      $( this ).dialog( "close" );

    }
  }
}

);

答案 1 :(得分:2)

jQuery对话框异步 - 它不会阻塞。该功能将继续并返回,无需等待响应。您需要使用以下代码:

function confirmMessage(msg,goto){
    elementHtml = '<div id="ConfirmMessage">'+msg+'</div>';
    $("body").append(elementHtml);
    $("#ConfirmMessage").dialog({
        resizable: false,
        height:140,
        modal: true,
        buttons: {
            "Delete": function() {   
                 $( this ).dialog( "close" );
                 window.location.href=goto;
             },
             Cancel: function() {
                 $( this ).dialog( "close" );
             },
         },
     });
    return false;
}

<a href="delete.php?id=12" onclick="return confirmMessage('Are You REALLY Sure?',this.href)">Delete</a>

改变所以返回并不是实际确定发生了什么。

请参阅此JSFiddle

答案 2 :(得分:0)

你甚至可以在看到模态窗口之前执行“返回p”。对话框方法是异步执行的