控件ID正确呈现但仍然出现javascript错误

时间:2011-07-25 09:40:36

标签: javascript asp.net controls

错误:

Microsoft JScript runtime error: 'ctl00_ContentPlaceHolder1_txtAdmDate' is undefined

代码:

<input ID="txtAdmDate" runat="server" readonly="readonly" type="text" 
                                        tabindex="23" clientidmode="AutoID" />
    <a href="#" onclick="showCalendarControl(ctl00_ContentPlaceHolder1_txtAdmDate)">
                                    <img border="0" src="images/SmallCalendar.jpg" 
                                        style="width: 20px; height: 20px" /></a>                             

使用Javascript:

function showCalendarControl(textField) {
      calendarControl.show(textField);
    }

html呈现源:

<input name="ctl00$ContentPlaceHolder1$txtAdmDate" type="text" id="ctl00_ContentPlaceHolder1_txtAdmDate" readonly="readonly" tabindex="23" />
       <a href="#" onclick="showCalendarControl(ctl00_ContentPlaceHolder1_txtAdmDate)">
        <img border="0" src="images/SmallCalendar.jpg" 
                                        style="width: 20px; height: 20px" /></a>

问题:

虽然html呈现源显示控件的id是ctl00_ContentPlaceHolder1_txtAdmDate并且同样传递给javascript函数生成错误。我已经尝试将clientidmode设置为Autoid和static但是没有任何效果。需要你们帮助解决这个问题。

2 个答案:

答案 0 :(得分:0)

当你这样说时:

showCalendarControl(ctl00_ContentPlaceHolder1_txtAdmDate)

您假设ctl00_ContentPlaceHolder1_txtAdmDate是变量但它不是变量,它只是一个DOM id属性。你可以这样说:

showCalendarControl(document.getElementById('ctl00_ContentPlaceHolder1_txtAdmDate'))

将其转换为函数调用中的对象,或者您可以将ID发送到showCalendarControl并让它将ID转换为对象:

onclick="showCalendarControl('ctl00_ContentPlaceHolder1_txtAdmDate')"

然后调整showCalendarControl

function showCalendarControl(textFieldId) {
    var textField = document.getElementById(textFieldId);
    calendarControl.show(textField);
}

答案 1 :(得分:0)

首先,它看起来像是在Master Page或User Control中(因此名称为mangling),在这种情况下,你不应该假设通过硬编码来破坏名称。如果您使用其他母版页或将用户控件移动到另一个页面,则错误的名称可能会有所不同。要解决此问题,请改用ClientID属性。

此外,您不能直接通过名称引用控件以让Javascript找到它,因为控件不是全局变量。相反,您可以使用document.getElementById来查看控件的句柄。

<a href="#" onclick="showCalendarControl(document.getElementById('<%=txtAdmDate.ClientID%>')">