0

代码背后

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]

4

1 回答 1

1

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

我建议如下:

  1. 使您的ASP runat="server"Button 不可见 ( display:none;)
  2. 放一个新的,client side button到同一个地方
  3. 单击客户端按钮,调用Confirmation
  4. 作为对话框中选择的回调yes,触发对不可见的点击ASP button

这可能是对回发发生时间进行编程控制的最简单方法,而用户无法直接调用回发。

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

buttons['Yes'] = function() {
    $(this).dialog('close');
    var result = $(source).attr('tag');
    $('#<%=hidField.ClientID%>').val(result);
    $('#<%=btnNext.ClientID%>').click();
};
于 2013-08-07T06:00:13.517 回答