2

我遇到了以下给定的 asp.net 页面,其中包含

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

和下面的 jquery 代码在对话框中显示这个 div

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

如果单击 view_test 按钮,则在表单发布支持 .Net 中的复选框 ch1.Checked 属性之前初始化对话框,该属性始终为 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 元素移动到 Lightbox 区域,但不会将它们移回原来的位置,将它们放在表单之外

我敢打赌,后者会发生。

可能的解决方法:

  • 将表单放入对话窗口(如果可能)

  • 修改对话框脚本,以便在它移动的 DOM 对象中存储对父元素的引用,并在对话框关闭时将它们移回正确的位置。

  • 或者使用 fehays 建议的非常简单的解决方案。

于 2010-01-15T19:33:09.793 回答