在JavaScript中弹出的模态不起作用

时间:2015-12-21 12:18:39

标签: javascript jquery asp.net

我正在尝试使用带有ASP.NET网络表单的JavaScript进行简单的弹出窗口。

我有以下代码:

<%@ Register Src="~/Controls/BankInformation.ascx" TagName="BankInformation" TagPrefix="ABS" %>

    <script type="text/javascript">
        $(document).ready(function () {
            var bankInformation = $('#<%=bankInformation.ClientID%>');
            var sameAsMerchantBankCheckbox = $('#<%=chkSameAsMerchantBank.ClientID%>');
            function OpenDirectDebitDialog(dialogID) {
                $("#" + dialogID).modal();
            }

            function ValidateAndCloseDirectDebitDialog(validationGroup, dialogID) {
                var pageValid = Page_ClientValidate(validationGroup);
                if (pageValid)
                    $("#" + dialogID).modal("hide");
            }

            $(sameAsMerchantBankCheckbox).change(function () {
                OpenDirectDebitDialog(bankInformation);
            });
        });
    </script>

    <asp:CheckBox runat="server" ID="chkDirectDebit" />
    <asp:Label runat="server" AssociatedControlID="chkSameAsMerchantBank" ID="txtDirectDebit" meta:resourcekey="lblDirectDebit"></asp:Label>
    <asp:CheckBox runat="server" ID="chkSameAsMerchantBank" AutoPostBack="True" Checked="True" />
    <asp:Label runat="server" AssociatedControlID="txtSameAsMerchantBank" ID="txtSameAsMerchantBank" meta:resourcekey="lblSameAsMerchantBank"></asp:Label>

    <div id="bankInfoDialog" runat="server" class="modal hide fade" tabindex="-1" role="dialog" aria-hidden="true">
        <ABS:BankInformation runat="server" ID="bankInformation" />
    </div>

取消选择chkSameAsMerchantBank复选框时,应该触发事件并调用OpenDirectDebitDialog函数。但所有这一切都是页面刷新(我猜自动发回)。浏览器控制台中没有错误或任何内容 有人看到我做错了什么吗?我甚至可以像这样在modal上调用隐藏的表单吗?

2 个答案:

答案 0 :(得分:1)

您不必在函数中再次重新创建jQuery id选择器:

 $("#" + dialogID).modal();

因为传递的参数已经是一个jQuery对象。所以只需从中删除"#"+

为什么呢?见下文:

因为这个var是一个jQuery对象:

var bankInformation = $('#<%=bankInformation.ClientID%>'); // id selector jq object.

你不必在函数中再次使它成为它的id选择器:

var sameAsMerchantBankCheckbox = $('#<%=chkSameAsMerchantBank.ClientID%>');// id selector.

在更改事件的函数中传递:

$(sameAsMerchantBankCheckbox).change(function () { // <----this will do.
    OpenDirectDebitDialog(bankInformation); // <----passed the jQuery selector object here.
});    

所以你只需要这样做:

function OpenDirectDebitDialog(dialogID) {
   dialogID.modal(); // it would suffice.
   // or $(dialogID).modal(); 
}

答案 1 :(得分:1)

你必须做

var sameAsMerchantBankCheckbox = $('#<%=chkSameAsMerchantBank.ClientID%>');
在您的代码中

然后访问复选框ID