0

私は Asp.net で Javascript に固執しています... tbValidFrom という名前の TextBox と tbValidTo という名前の別の TextBox を作成しました。また、2 つの ModalPopups を作成しました。次に、TextBoxes がフォーカスされたときに ModalPopupExtenders を開こうとします。

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

しかし、 tbValidTo または ModalPopUpExtender が見つかりませんか?

Microsoft JScript のランタイム エラー: オブジェクトが必要です

以下は、2 つの ModalPopupExtender と TextBox のうちの 1 つです。

<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

そのマークアップを見ると、問題が発生する可能性が 2 つあります。

  1. ModalPopupExtender を使用します。パネル "PanelNewVersion" を指定した場所。マークアップに欠けているようです。

  2. Javascript コード内。そのポップアップを非表示にする場合は、パネルの名前を指定します。ModalPopupextender の名前ではありません。

また、ページに更新パネルを用意したので、テキストボックスのサイドイベントでモーダルポップアップを簡単に処理できます。

それ以外の場合は、モーダル ポップアップ ijn クライアント サイドを使用する場合は、jQuery Modalpopup を使用します。それがより良い選択肢になります。

于 2013-10-22T12:02:21.147 に答える
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 を使用する必要があります。

以下のコードは正しく動作するはずです:

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

これにより、ASP.NET Inline 式を使用してテキスト ボックス オブジェクトが検索され、クライアント 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

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 に答える