多个UI对话框:禁用按钮影响其他对话框



我的页面有多个对话框。我为它定义了单独的div 部分。根据要求,我必须禁用对话框中的保存按钮,直到未填充所有必填字段。我可以禁用它。当我打开其他对话框时出现问题。保存按钮也会禁用这些对话框。

我可以在我不想这样做的对话框中放置脚本以启用按钮。我还有其他解决方案可以解决此问题吗?

Mypage.cshtml

<div id="MyDialg" title="Dialog 1">
</div>
<input id="btnMy" type="button" value="Dialog1" />

我的.JS

$('#MyDialg').dialog({
    autoOpen: false,
    width: 400,
    height: 350,
    modal: true,
    resizable: false,
    buttons: {
        "Cancel": function () { $(this).dialog("close"); },
        "Save": function () {
        }
    }
});
$("#btnMy").button().live("click", function () {
    var diag = $('#MyDialg');
    diag.load("Action/Controller", '', function () {
    });
    $(diag).dialog('open');
    return false;
});

我在加载时使用以下行来禁用对话框上的"保存"按钮:

_MyDialog.cshtml

    $(".ui-dialog-buttonpane button:contains('Save')").button("enable");

源代码(对话框 html 之一)

<DIV class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix" jQuery17205878367688005092="61" sizcache04606232417093721="71" sizset="0"><SPAN id=ui-dialog-title-MyDialg1 class=ui-dialog-title jQuery17205878367688005092="62">MyDialg title</SPAN><A class="ui-dialog-titlebar-close ui-corner-all" role=button href="#" jQuery17205878367688005092="60"><SPAN class="ui-icon ui-icon-closethick" jQuery17205878367688005092="63">close</SPAN></A></DIV> 
<DIV style="MIN-HEIGHT: 0px; WIDTH: auto; HEIGHT: 247px" id=MyDialg1 class="ui-dialog-content ui-widget-content" jQuery17205878367688005092="58" scrolltop="0" scrollleft="0">
<FORM id=form1 method=post action=/action1/controllername jQuery17205878367688005092="172" novalidate="novalidate" data-ajax-success="showSuccessMessage" data-ajax-method="POST" data-ajax="true" data-ajax-failure="showErrorMesage">
<BR>
<DIV class=field><LABEL for=Name>Description: </LABEL><SUP class=mandatory>*</SUP> <INPUT id=Name class="text-box single-line" type=text name=Name> <BR><SPAN class=field-validation-valid data-valmsg-replace="true" data-valmsg-for="Name"></SPAN></DIV><BR><BR>
<HR>
<BR>
</FORM><BR></DIV>
<DIV class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" sizcache04606232417093721="71" sizset="1">
<DIV class=ui-dialog-buttonset sizcache04606232417093721="71" sizset="1"><BUTTON aria-disabled=false class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" role=button type=button jQuery17205878367688005092="64"><SPAN class=ui-button-text>Cancel</SPAN></BUTTON><BUTTON aria-disabled=true class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only ui-button-disabled ui-state-disabled" role=button disabled type=button jQuery17205878367688005092="65"><SPAN class=ui-button-text>Save</SPAN></BUTTON></DIV></DIV>

可以使用对话框ID作为起点来定位特定按钮。 因为我认为您在上面的代码中拥有的内容特定于您要启用/禁用按钮的对话框。 您可以使用以下代码查找不会影响其他对话框的特定"保存"按钮

$('#MyDialg').find('button:contains("Save")').button('disable');
$('#MyDialg').find('button:contains("Save")').button('enable');

编辑:

有两种

方法可以做到这一点。 您可以使用以下内容遍历当前结构以查找它

  1. 从对话 ID 开始
  2. 查找主对话框
  3. 查找包含"保存"按钮文本的范围
  4. 获取按钮容器并将其禁用

代码

$('#MyDialg').closest('div.ui-dialog').find('span.ui-button-text:contains("Save")').closest('.ui-button').button('disable');

http://jsfiddle.net/wirey00/zDUQX/

或者你可以给你的按钮一个ID

buttons: {
    "Cancel": function () { $(this).dialog("close"); },
    "Save": {
        text: 'Save', // <-- text to show
        id: 'test',  // <-- this sets the id to TEST
        click: function () {
              // code here
        }
    }

然后只需使用 ID 禁用它

$('#test').button('disable');

http://jsfiddle.net/wirey00/zf9Wp/

最新更新