【问题标题】:control id rendered correctly but still getting javascript error控件 ID 正确呈现但仍然出现 javascript 错误
【发布时间】:2011-07-25 09:40:36
【问题描述】:

错误:

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,但没有任何效果。需要你们的帮助来解决这个问题。

【问题讨论】:

  • 你的 calendarControl.show 方法期望什么 - 它是一个 ID 字符串(因为这不是它目前得到的)?另外,您遇到了什么错误?

标签: javascript asp.net controls


【解决方案1】:

首先,您看起来像是在母版页或用户控件中(因此名称重整),在这种情况下,您不应假设名称将如何通过硬编码来重整。如果您使用不同的母版页或将用户控件移动到另一个页面,则损坏的名称可能不同。要解决此问题,请改用 ClientID 属性。

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

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

【讨论】:

    【解决方案2】:

    当你这样说时:

    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);
    }
    

    【讨论】:

    • 感谢您提供的第一个解决方案对我有用。第二个仍然给出相同的错误。我会在空闲时间处理它。干杯:)
    • @mkkvs:Mike 显然比我更了解他的 ASP.net(但老实说,摇滚也是如此)他比我更值得拥有它。
    猜你喜欢
    • 2015-12-19
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 2019-07-09
    • 2019-06-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多