从外部jscript调用时,document.getElementById()返回null

时间:2014-02-25 05:15:57

标签: javascript asp.net

我有一个aspx页面,看起来像这样,并调用解决方案中的123.js文件。

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="1.aspx.cs" Inherits="1"  ValidateRequest="false"%>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <script src="Scripts/123.js" type="text/javascript"></script>
    .
    .
    .
    .
    <tr>
     <td>Start DateTime</td>
     <td>
      <asp:TextBox ID="txtStartDateTime" runat="server"></asp:TextBox>                                
     </td>
     <td>                                    
       <a href="javascript:_fnSet('this', 'txtStartDateTime', 'close=true,instance=single')">                                         
       <img src="Styles/imagesCA3B3R54.jpg" alt="IMG" style="border-style: none" />                                         
       </a>
      </td>
    </tr>
</asp:Content>

此函数fnSet()位于123.js

123.js以

开头
function _fnSet(e, sInputID, sCustom) {
    var oInput = document.getElementById(sInputID);
}

sInputID将值'txtStartDateTime'作为字符串,但此oInput返回null。

为什么会这样...... ???

2 个答案:

答案 0 :(得分:3)

您在ContentPlaceHolder中。默认情况下,ASP.NET在呈现给客户端时会在Control的ID前面放置一个额外的标识符。这称为ClientID。您可以通过更改ClientIDMode来更改ClientID的生成方式。尝试将ClientIDMode更改为静态。

<asp:TextBox ID="txtStartDateTime" ClientIDMode="Static" runat="server" />

如果您对客户端使用的ID有疑问,请在浏览器中查看该页面并查看生成的页面的HTML。

在您的web.config文件中,您可以将ClientIdMode默认设置为静态。

<pages clientIDMode="static" />

答案 1 :(得分:0)

txtStartDateTime的ID实际上是不同的。看看源代码。

您可以像下面这样获取ClientID:

document.getElementById('<%# txtStartDateTime.ClientID %>')