0

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

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

但它没有找到 tbValidTo 或 ModalPopUpExtender ?

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

这是两个 ModalPopupExtender 和 TextBox 之一:

<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 同上...

帮助会非常好。谢谢

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

在此处输入图像描述

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

4

3 回答 3

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。

希望有帮助

于 2013-10-22T11:44:19.553 回答
0

ASP.NET 可以修改元素的 ID,如果您使用 Masterpage,则元素 ID 将被修改为如下所示:ctl001_ContentPlaceHolder1_tbValidFrom

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

有关ASP.NET 内联表达式的更多信息,请参阅以下问题的答案

您可以在此处查看更改客户端 ID 模式(呈现页面时 ASP.NET 修改 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>
于 2013-10-22T11:45:38.867 回答
0

看到该标记有两个问题的机会。

  1. 使用 ModalPopupExtender。您在哪里给出了面板 "PanelNewVersion" 。似乎它在标记中丢失了。

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

您还在页面中提供了一个更新面板,因此您可以轻松地在文本框的任何服务器端事件中处理 modalpopup。

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

于 2013-10-22T12:02:21.147 回答