298

ASP.NET ページでうまく機能する jQuery UI ダイアログがあります。

jQuery(function() {
    jQuery("#dialog").dialog({
        draggable: true,
        resizable: true,
        show: 'Transfer',
        hide: 'Transfer',
        width: 320,
        autoOpen: false,
        minHeight: 10,
        minwidth: 10
    });
});

jQuery(document).ready(function() {
    jQuery("#button_id").click(function(e) {
        jQuery('#dialog').dialog('option', 'position', [e.pageX + 10, e.pageY + 10]);
        jQuery('#dialog').dialog('open');
    });
});

私の部門:

<div id="dialog" style="text-align: left;display: none;">
    <asp:Button ID="btnButton" runat="server" Text="Button" onclick="btnButton_Click" />
</div>

しかし、btnButton_Click が呼び出されることはありません...どうすれば解決できますか?

詳細: このコードを追加して、div をフォームに移動しました。

jQuery("#dialog").parent().appendTo(jQuery("form:first"));

しかし、まだ成功せず...

4

17 に答える 17

37
$('#divname').parent().appendTo($("form:first"));

このコードを使用すると問題が解決し、すべてのブラウザー、Internet Explorer 7、Firefox 3、および Google Chrome で動作しました。jQuery が好きになりました... クールなフレームワークです。

私も部分的なレンダリングでテストしました。まさに私が探していたものです。すごい!

<script type="text/javascript">
    function openModalDiv(divname) {
        $('#' + divname).dialog({ autoOpen: false, bgiframe: true, modal: true });
        $('#' + divname).dialog('open');
        $('#' + divname).parent().appendTo($("form:first"));
    }

    function closeModalDiv(divname) {
        $('#' + divname).dialog('close');
    }
</script>
...
...
<input id="Button1" type="button" value="Open 1" onclick="javascript:openModalDiv('Div1');" />
...
...
<div id="Div1" title="Basic dialog" >
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
       <ContentTemplate>
          postback test<br />
          <asp:Button ID="but_OK" runat="server" Text="Send request" /><br />
          <asp:TextBox ID="tb_send" runat="server"></asp:TextBox><br />
          <asp:Label ID="lbl_result" runat="server" Text="prova" BackColor="#ff0000></asp:Label>
        </ContentTemplate>
    <asp:UpdatePanel>
    <input id="Button2" type="button" value="cancel" onclick="javascript:closeModalDiv('Div1');" />
</div>
于 2009-05-13T09:06:45.510 に答える
34

FWIW、フォーム:最初のテクニックは私にはうまくいきませんでした。

ただし、そのブログ記事の手法は次のことを行いました。

http://blog.roonga.com.au/2009/07/using-jquery-ui-dialog-with-aspnet-and.html

具体的には、これをダイアログ宣言に追加します。

  open: function(type,data) {
    $(this).parent().appendTo("form");
  }
于 2009-11-11T23:16:58.013 に答える
28

jQuery UI v1.10 には追加の設定があることに注意してください。要素をフォームに再度追加するために使用しているASP.NETの回避策に対処するために、追加されたappendTo設定があります。

試す:

$("#dialog").dialog({
     autoOpen: false,
     height: 280,
     width: 440,
     modal: true,
     **appendTo**:"form"
});
于 2013-05-11T11:01:23.433 に答える
25

上記のkenの答えは私にとってはうまくいきました。受け入れられた回答の問題は、ページに単一のモーダルがある場合にのみ機能することです。複数のモーダルがある場合は、事後ではなく、ダイアログの初期化中に「open」パラメーターでインラインで行う必要があります。

open: function(type,data) { $(this).parent().appendTo("form"); }

最初に受け入れられた回答が複数のモーダルで教えてくれることを行うと、ページの最後のモーダルのみがポストバックを適切に起動し、すべてではありません。

于 2010-01-28T21:25:00.903 に答える
21

これは主に、jQueryがDOMを使用してダイアログをフォームタグの外に移動するためです。フォームタグ内に戻すと、正常に機能するはずです。これは、Firefoxで要素を調べることで確認できます。

于 2009-04-16T17:49:29.587 に答える
8

プロジェクトのすべてのダイアログでこの問題を回避する必要がなかったので、単純な jQuery プラグインを作成しました。このプラグインは、新しいダイアログを開いてASP.NETフォーム内に配置するためだけのものです。

(function($) {
    /**
     * This is a simple jQuery plugin that works with the jQuery UI
     * dialog. This plugin makes the jQuery UI dialog append to the
     * first form on the page (i.e. the asp.net form) so that
     * forms in the dialog will post back to the server.
     *
     * This plugin is merely used to open dialogs. Use the normal
     * $.fn.dialog() function to close dialogs programatically.
     */
    $.fn.aspdialog = function() {
        if (typeof $.fn.dialog !== "function")
            return;

        var dlg = {};

        if ( (arguments.length == 0)
                || (arguments[0] instanceof String) ) {
            // If we just want to open it without any options
            // we do it this way.
            dlg = this.dialog({ "autoOpen": false });
            dlg.parent().appendTo('form:first');
            dlg.dialog('open');
        }
        else {
            var options = arguments[0];
            options.autoOpen = false;
            options.bgiframe = true;

            dlg = this.dialog(options);
            dlg.parent().appendTo('form:first');
            dlg.dialog('open');
        }
    };
})(jQuery);</code></pre>

プラグインを使用するには、まず jQuery UI をロードしてからプラグインをロードします。次に、次のようなことができます。

$('#myDialog1').aspdialog(); // Simple
$('#myDialog2').aspdialog('open'); // The same thing
$('#myDialog3').aspdialog({title: "My Dialog", width: 320, height: 240}); // With options!

明確にするために、このプラグインは、呼び出し時にダイアログを表示する準備ができていることを前提としています。

于 2010-11-10T16:18:42.440 に答える
8

これは古い質問であることは知っていますが、同じ問題を抱えている人には、より新しく簡単な解決策があります。「appendTo」オプションが jQuery UI 1.10.0 で導入されました。

http://api.jqueryui.com/dialog/#option-appendTo

$("#dialog").dialog({
    appendTo: "form"
    ....
});
于 2013-12-14T22:56:42.873 に答える
7

素晴らしい!これにより、ASP:Button イベントが jQuery モーダル内で発生しないという問題が解決しました。jQuery UI モーダルを次のように使用すると、ボタン イベントが発生することに注意してください。

// Dialog Link
$('#dialog_link').click(function () {
    $('#dialog').dialog('open');
    $('#dialog').parent().appendTo($("form:first"))
    return false;
});

次の行は、これを機能させるための鍵です!

$('#dialog').parent().appendTo($("form:first"))
于 2010-05-18T13:12:57.427 に答える
3

これは私にとって最も明確な解決策でした

var dlg2 = $('#dialog2').dialog({
        position: "center",
        autoOpen: false,
        width: 600,
        buttons: {
            "Ok": function() {
                $(this).dialog("close");
            },
            "Cancel": function() {
                $(this).dialog("close");
            }
        }
    });

dlg2.parent().appendTo('form:first');
$('#dialog_link2').click(function(){
    dlg2.dialog('open');

内のすべてのコンテンツをdlg2データベースに挿入できます。dialog自分の変数に合わせて変数を変更することを忘れないでください。

于 2013-01-15T18:07:02.910 に答える
3

ダイアログを作成した後、次の行を追加しました。

$(".ui-dialog").prependTo("form");
于 2012-01-10T07:01:20.227 に答える
1

投票数が最も多い Robert MacLean のソリューションは 99% 正しいです。しかし、誰かが必要とする唯一の追加は、私が行ったように、この jQuery ダイアログを開く必要があるときはいつでも親に追加することを忘れないことです。以下のように:

var dlg = $('#questionPopup').dialog( 'open'); dlg.parent().appendTo($("form:first"));

于 2009-07-21T14:05:52.203 に答える
1

ダイアログを正しい方法で移動しますが、ダイアログを開くボタンでのみ行う必要があります。jQuery UI サンプルの追加コードを次に示します。

$('#create-user').click(function() {
    $("#dialog").parent().appendTo($("form:first"))
    $('#dialog').dialog('open');
})

ダイアログ内にあなたを追加するasp:buttonと、うまく動作します。

注: 「ユーザーの作成」ボタンをクリックした後のポストバックを防ぐために、 <button> を <input type=button> に変更する必要があります。

于 2009-04-23T10:55:40.147 に答える
0

正確な解決策は次のとおりです。

$("#dialogDiv").dialog({ other options...,
    open: function (type, data) {
        $(this).parent().appendTo("form");
    }
});
于 2013-04-17T10:28:04.940 に答える