0

マルチビュー オプションを使用して 2 つのビューを作成しました。実行時に、次のエラーが発生します。

Microsoft JScript runtime error: 'null' is null or not an object

このコードの場合:

window.onload = function checkbox(check) {
var check = document.getElementById("<%=cbxAuth.ClientID %>"); //<- error from here
check.onchange = function checkbox(check) {
  if (this.checked == true)
   {
    document.getElementById("<%=txtUsName.ClientID %>").disabled = false;
    document.getElementById("<%=txtPassword.ClientID %>").disabled = false;
   }
  else
   {
    document.getElementById("<%=txtUsName.ClientID %>").disabled = true;
    document.getElementById("<%=txtPassword.ClientID %>").disabled = true;
   }
 }; // Till here
};

コードを動的に分析したところ、これは 2 番目のビューにあり、コード全体が動的ランタイムに存在しないことに気付きました。

これは、ビューを作成するための私のフロントエンド コードです。

 <td>
 <asp:Button Text="Generate License" BorderStyle="None" ID="Tab1" CssClass="Initial"
  runat="server" OnClick="Tab1_Click" ValidationGroup="generatelicence" />
 <asp:Button Text="Mail Configuration" BorderStyle="None" ID="Tab2" CssClass="Initial"
   runat="server" OnClick="Tab2_Click" ValidationGroup="sendemail" />
 <asp:MultiView ID="MainView" runat="server">

これは、2 番目のビューを作成する際のコードです。

<asp:View ID="View2" runat="server">
             <table style="width: 100%; border-width: 1px; border-color: #666; border-style: solid">
                 <tr>
                     <td class="style15">
                         FROM
                     </td>
                     <td>
                         <asp:TextBox ID="txtFrom" runat="server" Width="414px" CssClass="Textbox1"></asp:TextBox>
                         <asp:LinkButton ID="lbEdit0" runat="server" onclick="lbEdit0_Click"> Edit </asp:LinkButton>
                         <asp:RegularExpressionValidator ID="regexSendFrom" runat="server" ControlToValidate="txtFrom"
                             ErrorMessage="Enter a Valid Name" ValidationExpression="\w+([\s-_]\w+)*" ValidationGroup="sendemail"></asp:RegularExpressionValidator>
                     </td>
                 </tr>
                 <tr>
                     <td class="style15">
                         SENDER MAIL</td>
                     <td>
                         <asp:TextBox ID="txtMailAdd" runat="server" Width="414px" CssClass="Textbox1"></asp:TextBox>
                         <asp:LinkButton ID="lbEdit1" runat="server" onclick="lbEdit1_Click"> Edit
                         </asp:LinkButton>
                         <asp:RegularExpressionValidator ID="regexSender" runat="server" 
                             ControlToValidate="txtMailAdd" ErrorMessage="Incorrect Mailing Address" 
                             ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" 
                             ValidationGroup="sendemail"></asp:RegularExpressionValidator>
                     </td>
                 </tr>
                 <tr>
                     <td class="style15">
                         SMTP IP
                     </td>
                     <td>
                         <asp:TextBox ID="txtSMTP" runat="server" Width="414px" CssClass="Textbox1"></asp:TextBox>
                         <asp:LinkButton ID="lbEdit2" runat="server" onclick="lbEdit2_Click"> Edit
                         </asp:LinkButton>
                         <asp:RegularExpressionValidator ID="regexSMTP" runat="server" 
                             ControlToValidate="txtSMTP" ErrorMessage="IP Address is Incorrect" 
                             ValidationExpression="(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" 
                             ValidationGroup="sendemail"></asp:RegularExpressionValidator>
                     </td>
                 </tr>
                 <tr>
                     <td class="style15">
                         SMTP AUTHENTICATION
                     </td>
                     <td>
                         <asp:CheckBox ID="cbxAuth" runat="server" />
                     </td>
                 </tr>
                 <tr>
                     <td class="style16">
                         &nbsp;
                     </td>
                     <td class="style11">
                         User Name&nbsp;
                         <asp:TextBox ID="txtUsName" runat="server" Enabled="false" Width="299px" CssClass="Textbox1"></asp:TextBox>
                         <asp:LinkButton ID="lbEdit3" runat="server" OnClick="lbEdit3_Click"> Edit
                         </asp:LinkButton>
                         <br />
                         Password&nbsp;&nbsp;&nbsp;
                         <asp:TextBox ID="txtPassword" runat="server" TextMode="Password" Width="300px" Enabled="false"
                             CssClass="Textbox1"></asp:TextBox>
                         <asp:LinkButton ID="lbEdit4" runat="server" OnClick="lbEdit4_Click"> Edit
                         </asp:LinkButton>
                         <asp:RequiredFieldValidator ID="reqPass" runat="server" ControlToValidate="txtPassword"
                             Display="Dynamic" ErrorMessage="Enter a Password" ValidationGroup="sendemail"></asp:RequiredFieldValidator>
                         &nbsp;<asp:RequiredFieldValidator ID="reqUserMail" runat="server" ControlToValidate="txtUsName"
                             Display="Dynamic" ErrorMessage="Enter a User Name" ValidationGroup="sendemail"></asp:RequiredFieldValidator>
                         &nbsp;
                     </td>
                 </tr>
                 <tr>
                 <td class="style15"> RECEIVER </td>
                 <td> <asp:TextBox ID="txtReceiver" runat="server" CssClass="Textbox1" Width="414px"></asp:TextBox>
                 <asp:LinkButton ID="lbEdit5" runat="server" OnClick="lbEdit5_Click"> Edit </asp:LinkButton>
                 </td>

                 </tr>
                 <tr>
                     <td class="style15">
                         TO MAIL
                     </td>
                     <td>
                         <asp:TextBox ID="txtTo" runat="server" CssClass="Textbox1" Width="414px"></asp:TextBox>
                         <asp:LinkButton ID="lbEdit6" runat="server" OnClick="lbEdit6_Click"> Edit
                         </asp:LinkButton>
                         <asp:RegularExpressionValidator ID="regexTo" runat="server" 
                             ControlToValidate="txtTo" Display="Dynamic" ErrorMessage="Enter an E-Mail Address" 
                             ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"></asp:RegularExpressionValidator>
                         <asp:RequiredFieldValidator ID="reqMailTo" runat="server" 
                             ControlToValidate="txtTo" ErrorMessage="Enter a Mailing Address"></asp:RequiredFieldValidator>
                     </td>
                 </tr>
                 <tr>
                     <td class="style15">
                         SUBJECT
                     </td>
                     <td class="style11">
                         <asp:TextBox ID="txtSub" runat="server" Width="414px" CssClass="Textbox1"></asp:TextBox>
                     </td>
                 </tr>
                 <tr>
                     <td class="style15">
                         CONTENT
                     </td>
                     <td>
                         <asp:TextBox ID="txtBody" runat="server" Width="414px" CssClass="Textbox1" Columns="10"
                             Rows="10" TextMode="MultiLine"></asp:TextBox>
                     </td>
                 </tr>
                 <tr>
                     <td class="style16">
                         ATTACHMENT
                     </td>
                     <td>
                         <asp:FileUpload ID="fupAttach" runat="server" CssClass="Textbox1" 
                             Width="414px" />
                     </td>
                 </tr>
                 <tr>
                     <td colspan="2">
                         &nbsp; &nbsp;
                     </td>
                 </tr>
                 <tr>
                     <td colspan="2">
                         &nbsp;&nbsp;
                     </td>
                 </tr>
                 <tr>
                     <td colspan="2">
                            <tr>
                                <td colspan="2" style="margin-left: 40px" align="center">
                                    <asp:Label ID="lblMailFail" runat="server" ForeColor="Red"></asp:Label>
                                </td>
                            </tr>
                     </td>
                 </tr>
                 <tr>
                     <td colspan="2" align="center" class="style12" style="margin-left: 500px">
                         <asp:Button ID="btnSMail" runat="server" CssClass="btn" Text="Send" 
                             onclick="btnSMail_Click" />
                         &nbsp;<asp:Button ID="btnCancelMail" runat="server" CssClass="btn" Text="Cancel" />
                     </td>
                 </tr>
                 <tr>
                     <td colspan="2">
                         &nbsp;
                     </td>
                 </tr>
             </table>
         </asp:View>

これが起こっている正当な理由はありますか?

4

1 に答える 1

1

一方では、イベントcheckの関数のパラメーターとして渡し、この行で再度定義しています。checkbox(check)onloadcheck

var check = document.getElementById("cbxAuth"); //<- error from this line

さらに、eventsとに別の意味のある関数名を指定してみてはいかがでしょうか。onloadonchange

ADDED、マークアップを使用して質問を編集した後、cbxAuthこれはサーバー コントロールであるため、JavaScript で参照を取得するには ClientID を取得する必要があります。こちらです:

var chkbox = document.getElementById("<%= cbxAuth.ClientID %>");

他の部分については、前に説明したように、関数名を意味のある名前に単純に変更します。

window.onload = function OnWindowLoad(check) {
    var chkbox = document.getElementById("<%= cbxAuth.ClientID %>");
    if (chkbox)
    {
        chkbox.onchange = function OnCheckBoxChange(chkbox) {
            // ... rest of your code
        }; 
    }
};
于 2012-11-23T09:28:17.070 に答える