0

我正在使用 jquery ui 对话框,并且我已经对其进行了设置,以便它具有一个文本框和一个按钮。您基本上在文本框中输入一些内容并单击按钮,它会从数据库中提取一些值并加载单选按钮列表。HTML 标记如下所示:

 <div id="dialog" title="Select Address">
        <asp:UpdatePanel ID="upNewUpdatePanel" UpdateMode="Conditional" ChildrenAsTriggers="true" runat="server">
        <ContentTemplate>
            <div id="search" style="width:100%; text-align:center;">
                <asp:TextBox ID="txtFindSearch" runat="server"></asp:TextBox> 
                <asp:Button ID="btnFindSearch" runat="server" Text="Search" 
                    onclick="btnFindSearch_Click" />
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            </div>
            <div id="searchresults" style="width:100%;">
                <asp:RadioButtonList ID="rbSearchResults" runat="server" AutoPostBack="True" 
                    CellSpacing="10" RepeatColumns="4" RepeatDirection="Horizontal" 
                    ToolTip="Select an address." 
                    onselectedindexchanged="rbSearchResults_SelectedIndexChanged">
                </asp:RadioButtonList>
            </div>
        </ContentTemplate>
        </asp:UpdatePanel>
        </div>

在后面的代码中,我可以像这样获得选定的值:

 protected void rbSearchResults_SelectedIndexChanged(object sender, EventArgs e)
        {
            Label1.Text = rbSearchResults.SelectedValue.ToString();
        }

我的问题是从单选按钮列表中进行选择后,我不知道如何关闭 jquery 对话框。我试图在 jquery 中做这样的事情:

  $('#MainContent_rbSearchResults input').click(function () {
       $('#dialog').hide();
   });

即使我在那里发出警报,它也不会显示警报。如果我查看页面源代码,我看到了 div 容器,但没有看到单选按钮列表,可能是因为它包含在更新面板中吗?

获得值后如何关闭 jquery ui 对话框(单击单选按钮列表)?

编辑

我试过这个:

 protected void rbSearchResults_SelectedIndexChanged(object sender, EventArgs e)
        {
            Label1.Text = rbSearchResults.SelectedValue.ToString();
            this.txtShipToName.Text = Label1.Text;
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "closedialog", "$(function(){$('#dialog').dialog('close');});", true);
        }

这会关闭对话框,但是我的文本框 txtShipToName 永远不会获得值。即使我单步调试,我也会看到分配给它的值。

4

4 回答 4

1

对于您的第二个问题(编辑部分)--- txtShipName 可能不在正在更新的更新面板中。您可以将 txtShipName 放在 UpdatePanel 中并将其(UpdatePanel)UpdateMode 设置为 UpdateAlways。现在您的对话框工作了——这也应该导致您的文本框更新。

于 2012-04-20T20:21:29.347 回答
1

txtShipToName不在 UpdatePanel 内,这就是为什么它没有保持其值。

要解决此问题,您可以将txtShipToNameUpdateModeUpdatePanel设置为 Conditional,然后将其添加到您的代码中:

Label1.Text = rbSearchResults.SelectedValue.ToString();
this.txtShipToName.Text = Label1.Text;
this.theNewUpdatePanel.Update(); //Add this line

编辑

正如 ek_ny 在他的回答中所说,对于新的 UpdatePanel,最好将 UpdateMode 设置为 always,然后您就不需要调用Update()它了。

于 2012-04-20T20:14:23.120 回答
0

尝试使用此代码

$("#MainContent_rbSearchResult").on("click", "input", function(){
    $('#dialog').hide();
});

当您进行 ajax 调用时,您丢失了单击处理程序,因为 html 已被删除并在更新面板中重新生成。使用on方法可以解决此问题,因为在 ajax 回发后创建新控件时会重新附加处理程序。

于 2012-04-20T20:09:23.433 回答
0

也许这个例子会有用 http://jsfiddle.net/prJu7/

尝试使用

$('#dialog').dialog('close')

反而

 $('#dialog').hide();
于 2012-04-20T20:14:56.670 回答