0

全て、

環境: ASP.NET 2.0、AjaxToolkit ビルド 1.0.20229.0、IE9

$find() を使用してコール アウト エクステンダーの動作を検出しているため、.show() メソッドを使用して明示的に表示できます。残念ながら、$find() は null を返します。

 $find('my auto generated behvaiour Id').show();

参考までに: ValidatorCalloutExtender の BehaviorID は、コントロールの ClientID を使用して生成されます (ClientID_ + "BehaviourID" <- $find() 関数で使用するものでもあります)。これは、同じページにこのコントロールのインスタンスが多数あるためです。

レンダリングされたコードを確認したところ、動作を作成する JS が作成されていることがわかります。

Sys.Application.add_init(function() {
$create(AjaxControlToolkit.ValidatorCalloutBehavior ...

$find() は、UpdatePanel でポストバック後に実行され、常に null を返します。

編集 (追加): 私は新しいページを作成しました。以下はコードです。find() はまだ null を返します。

<body>
<form id="form1" runat="server">

<asp:ScriptManager ID="ScripManager1" runat="server" EnablePageMethods="True" >

        </asp:ScriptManager>

    <asp:TextBox runat="server" ID="txtInputField" />
    <asp:RequiredFieldValidator runat="server" ID="valInput"
ControlToValidate="txtInputField"
ErrorMessage="ERROR STRING"
Display="none" /> <ajaxToolkit:ValidatorCalloutExtender runat="server" ID="extValInput" TargetControlID="valInput" BehaviorID="myID" />
<asp:Button runat="server" ID="btn" OnClick="btn_click" CausesValidation="True" />

<script type="text/javascript">

        var obj = $find("myID");
        alert(obj);

</script>
</form>

追加: JS デバッガーで観察した後、バリデーター コールアウト エクステンダーはエラーが発生したときにのみ表示される (DOM に動的に追加される) ことに気付きました。

問題は次のとおりです: 表示する前に、コール アウトエクステンダーバルーンを再配置する方法は? 本当にcatch 22で、表示されていないときはアクセスできませんし、表示されているときは、間違った場所に表示されているため、もう遅いです。

4

2 に答える 2

4

この問題の原因は、ページがコンポーネントの初期化を完了する前にコンポーネントを見つけようとしたことです。Sys.Application.add_load イベント ハンドラーでエディターにアクセスしてみてください。次のコードを試してみましたが、すべて正常に動作します。

<script type="text/javascript">
    Sys.Application.add_load(function() {
        var obj = $find("myID");
        alert(obj);
    });
</script>

編集: 最新の質問に対処するには:どのように再配置できますか。Callout ValidatorCalloutExtender は、PopupExtender を使用して表示します。そのため、ポップアップ エクステンダーの「showing」および「shown」イベントにバインドしてから、吹き出しの位置を変更することができます。

<script type="text/javascript">
    Sys.Application.add_load(function() {
        var callouotComponent = $find("myID");
        var popupBehavior = callouotComponent._popupBehavior;

        popupBehavior.add_showing(function(){alert("I am showing");});
        popupBehavior.add_shown(function(){alert("I was shown");});
    });
</script>

注: このコードは確認していませんが、開始点として使用できます。

于 2012-10-25T19:43:27.200 に答える
1

コードを変更して検証すると、ポップアップの位置が変わります。

<script type="text/javascript">
    Sys.Application.add_load(function () {
      var callouotComponent = $find("myID");
      //Below line is to init popup ballon, otherwise popup behaviour will return null
      callouotComponent._ensureCallout();
      var popupBehavior = callouotComponent._popupBehavior;
      popupBehavior.set_x(100);
      popupBehavior.set_y(100);
    });

</script>
于 2014-03-06T05:35:53.430 に答える