发现对象的Javascript错误

时间:2013-10-22 11:41:07

标签: javascript asp.net modalpopupextender

我在Asp.net中坚持使用Javascript ... 我创建了一个名为tbValidFrom的TextBox和另一个名为tbValidTo的TextBox。 我还制作了两个ModalPopup。 然后我尝试在TextBoxes获得焦点时打开ModalPopupExtenders:

<script type="text/javascript">
$('#tbValidTo').focus(function () {
   $find('ModalPopupExtenderNV1').show();
})
$('#tbValidFrom').focus(function () {
    $find('ModalPopupExtenderNV2').show();
})
</script>

但是它找不到tbValidTo或ModalPopUpExtender?

  

Microsoft JScript中的运行时错误:预期的对象

以下是两个ModalPopupExtenders和TextBoxes之一:

<asp:TextBox ID="tbValidFrom" runat="server"></asp:TextBox>
<asp:UpdatePanel ID="UpdatePanelNV2" runat="server" RenderMode="Inline" UpdateMode="Conditional">
   <ContentTemplate>
      <cc1:ModalPopupExtender ID="ModalPopupExtenderNV2" runat="server" TargetControlID="HiddenField6"
       PopupControlID="PanelNewVersion" BackgroundCssClass="modalBackground" BehaviorID="ModalPopupExtenderNV2"
       Enabled="True" />
      <asp:HiddenField ID="HiddenField6" runat="server" />
   </ContentTemplate
</asp:UpdatePanel>

与上面相同的是另一个ModalPopupExtender和TextBox ......

帮助会非常好。 感谢

编辑:是的我使用了母版页!

enter image description here

在标记为黄色的地方失败。

3 个答案:

答案 0 :(得分:0)

你的jQuery语法错了。

将您的脚本更改为:

<script type="text/javascript">
$('#tbValidTo').focus(function () {
   $(this).find('#<%=ModalPopupExtenderNV1.ClientID%>').show();
});
$('#tbValidFrom').focus(function () {
    $(this).find('#<%=ModalPopupExtenderNV2.ClientID%>').show();
})
</script>

具有runat="server"的元素最终将以与您在aspx文件中输入的ID不同的ID结尾。

我使用<%= %>来获取'最终'ID。

希望有所帮助

答案 1 :(得分:0)

ASP.NET可以修改元素的ID,如果使用Masterpage,元素id将被修改为以下内容:ctl001_ContentPlaceHolder1_tbValidFrom

要解决元素的ASP.NET修改,可以使用ASP.NET内联表达式从对象中获取呈现的ID。

有关ASP.NET Inline Expressions

的更多信息,请参阅以下问题的答案

您可以在此处查看更改客户端ID模式(ASP.NET在呈现页面时修改ID的方式):

ASP.NET Client ID Modes

编辑

AjaxControlToolkit的ModalPopupExtender不会在页面上呈现为html元素,因此您无法使用ModalPopupExtender的ClientID找到此项目。

您必须使用BehaviourID来调用show函数。

以下代码应该可以正常运行:

$('#<%= tbValidTo.ClientID %>').focus(function () {
   $find('ModalPopupExtenderNV1').show();
})
$('#<%= tbValidFrom.ClientID %>').focus(function () {
   $find('ModalPopupExtenderNV2').show();
});

这将使用ASP.NET内联表达式找到文本框对象以查找客户端ID,然后找到行为ID并执行Show方法。

示例标记:

<script type="text/javascript">
$(document).ready(function() {

    $('#<%= tbValidFrom.ClientID %>').focus(function () {
       $find('ModalPopupExtenderNV2').show();
    });
});
</script>

<asp:TextBox ID="tbValidFrom" runat="server"></asp:TextBox>
<asp:UpdatePanel ID="UpdatePanelNV2" runat="server" RenderMode="Inline" UpdateMode="Conditional">
    <ContentTemplate>
        <cc1:modalpopupextender id="ModalPopupExtenderNV2" runat="server" targetcontrolid="HiddenField6"
            popupcontrolid="PanelNewVersion" backgroundcssclass="modalBackground" behaviorid="ModalPopupExtenderNV2"
            enabled="True" />
        <asp:HiddenField ID="HiddenField6" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

<asp:Panel ID="PanelNewVersion" runat="server">
    testing panel
</asp:Panel>

答案 2 :(得分:0)

看到这个标记有两个机会可以解决这些问题。

  1. 使用ModalPopupExtender。 你给面板“PanelNewVersion”的地方。似乎它在标记中缺失。

  2. 在Javascript代码中。如果要隐藏该弹出窗口,请提供该面板的名称。不要使用ModalPopupextender的名称。

  3. 此外,您已在页面中提供了更新面板,因此您可以轻松处理文本框中任何副作用的事件中的modalpopup。

    否则,如果您想使用Modal弹出式ijn客户端,请使用jQuery Modalpopup。这将是更好的选择。