我在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 ......
帮助会非常好。 感谢
编辑:是的我使用了母版页!
在标记为黄色的地方失败。
答案 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。
的更多信息,请参阅以下问题的答案您可以在此处查看更改客户端ID模式(ASP.NET在呈现页面时修改ID的方式):
编辑:
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)
看到这个标记有两个机会可以解决这些问题。
使用ModalPopupExtender。 你给面板“PanelNewVersion”的地方。似乎它在标记中缺失。
在Javascript代码中。如果要隐藏该弹出窗口,请提供该面板的名称。不要使用ModalPopupextender的名称。
此外,您已在页面中提供了更新面板,因此您可以轻松处理文本框中任何副作用的事件中的modalpopup。
否则,如果您想使用Modal弹出式ijn客户端,请使用jQuery Modalpopup。这将是更好的选择。