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

时间:2012-08-16 17:44:03

标签: jquery jquery-ui-dialog

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

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

Mypage.cshtml

<div id="MyDialg" title="Dialog 1">
</div>

<input id="btnMy" type="button" value="Dialog1" />

MyJs.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>

1 个答案:

答案 0 :(得分:1)

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

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

编辑:

有两种方法可以做到这一点。您可以使用以下

遍历当前结构以查找它
  1. 从对话框ID开始
  2. 找到主对话框
  3. 查找包含保存按钮文字的范围
  4. 获取按钮容器并将其禁用
  5. 代码

    $('#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/