2

私は以下を含むasp.netページを与えられて次のものに出くわしました

<div id='test'>
  <input type='checkbox' id='ch1' name='ch1' runat=server />
  <input type="button" id="view_test" />
</div>

このdivをダイアログに表示する次のjqueryコード

$("#view_test").click(function() {
    $("#test").dialog({ show: 'slide', width: 600, title: 'View Check' });
});

view_testボタンがクリックされ、ダイアログが初期化された場合、フォームの投稿がチェックボックスch1.Checkedプロパティを返す前に.Netのプロパティは常にFalseです。ただし、ダイアログを初期化せずにポストバックした場合は、期待どおりに機能します。

それは最も奇妙なことです...

4

2 に答える 2

3

jqueryダイアログは、作成時にdomに移動されます。ダイアログを作成したら、フォームタグに戻してみてください。

$("#test").parent().appendTo($("form:first"));

編集-より完全なコードは次のとおりです。

<script type="text/javascript">
    $(function() {

        $("#view_test").click(function() {
            $("#test").dialog({ show: 'slide', width: 600, title: 'View Check' });
            $("#test").parent().appendTo($("form:first"));
        });
    });
</script>

<body>
    <form id="form1" runat="server">
    <div>
        <div id="test">            
            <input type="checkbox" id="ch1" name="ch1" runat="server" />test
            <input type="button" id="view_test" value="click" />            
        </div>    
        <asp:Button ID="btnSubmit" runat="server" Text="submit" 
            onclick="btnSubmit_Click" />    
    </div>
    </form>
</body>

背後にあるコード:

public partial class Tests_Test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        Response.Write(ch1.Checked.ToString());
    }
}
于 2010-01-15T19:33:12.087 に答える
1

JQueryダイアログプラグインはわかりませんが、これまでに見たすべてのLightbox / Thickboxcloneで、これに頻繁に遭遇します。また:

  • スクリプトは、DOM要素を移動するのではなく、ライトボックス領域にコピーします。

  • スクリプトはDOM要素をライトボックス領域に移動しますが、元の位置に戻さず、フォームの外に配置します。

私の賭けは後者が起こることです。

考えられる回避策:

  • フォームをダイアログウィンドウに配置します(可能な場合)

  • 移動するDOMオブジェクトに親要素への参照を格納し、ダイアログが閉じられたときにそれらを適切な場所に戻すようにダイアログスクリプトを変更します。

  • または、fehaysが提案する非常に単純なソリューションを使用します。

于 2010-01-15T19:33:09.793 に答える