IE9确认对话框不等待用户输入,没有用户输入回发

时间:2013-08-07 02:01:22

标签: javascript jquery ajax internet-explorer-8 internet-explorer-9

代码背后

btnNext.Attributes.Add("onclick", " return Confirmation(this,'" +  GetLocalResourceObject("msg").ToString() + "'); ")

.ASPX页面[在javascript标签内]

function Confirmation(source, msg) {
    var dialog = '<div class="dialog confirm">' + msg + '</div>';
    var buttons = {};
    buttons['Yes'] = function() {
        $(this).dialog('close');
        var result = $(source).attr('tag');
        $('#<%=hidField.ClientID%>').val(result);
    };
    buttons['No'] = function() {
        $(this).dialog('close');
    };

    $(dialog).dialog({
        autoOpen: true,
        resizable: false,
        draggable: true,
        closeOnEscape: true,
        width: 'auto',
        buttons: buttons,
        title: 'Are you sure?',
        modal: true,
    });
}

当我点击按钮时,对话框会打开,但即使没有任何用户输入也会发回。 [单击对话框中的是/否]。

任何方法都可以防止回发发生,直到用户在对话框中单击是/否。 [IE9]

1 个答案:

答案 0 :(得分:1)

您的对话框有点async,因为函数Confirmation会立即返回。 因此,您无法返回用户是否会立即单击是或否。

我建议如下:

  1. ASP runat="server"按钮不可见(display:none;
  2. 将新的client side button放到同一个地方
  3. 点击客户端按钮,拨打Confirmation
  4. 作为在对话框中选择yes的回调,触发点击隐身ASP button
  5. 这可能是对回发发生时进行编程控制的最简单方法,而无需用户直接调用回发。

    在选择Yes时触发回发将如下所示:

    buttons['Yes'] = function() {
        $(this).dialog('close');
        var result = $(source).attr('tag');
        $('#<%=hidField.ClientID%>').val(result);
        $('#<%=btnNext.ClientID%>').click();
    };