Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery";。按钮“;单击ASP.NET按钮时装饰消失?_Jquery_Asp.net_Jquery Ui_Updatepanel - Fatal编程技术网

jQuery";。按钮“;单击ASP.NET按钮时装饰消失?

jQuery";。按钮“;单击ASP.NET按钮时装饰消失?,jquery,asp.net,jquery-ui,updatepanel,Jquery,Asp.net,Jquery Ui,Updatepanel,现在,您可以从jquery UI将.button()应用于锚定、按钮、提交按钮等。 我有一个简单的asp.net按钮,如下所示: <asp:Button ID="btnFindSearch" runat="server" Text="Search" onclick="btnFindSearch_Click" /> 但是,它位于updatepanel中,如下所示: <div id="dialog" title="Selec

现在,您可以从jquery UI将
.button()
应用于锚定、按钮、提交按钮等。 我有一个简单的asp.net按钮,如下所示:

<asp:Button ID="btnFindSearch" runat="server" Text="Search" 
                        onclick="btnFindSearch_Click" />

但是,它位于updatepanel中,如下所示:

 <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" />
            </div>
        </ContentTemplate>
        </asp:UpdatePanel>
        </div>

在jquery中,我可以执行以下操作:

$('btnFindSearch')。按钮()

它给了我一个按钮的jQueryUI外观…我觉得太棒了。但在我单击按钮的那一刻,该按钮返回到外观朴素的asp.net服务器按钮。就好像不再应用
.button()


这是因为它位于UpdatePanel内,还是什么原因导致的?

这是因为在按钮上单击会发生服务器回发,并且会替换原始DOM元素

UpdatePanel并不是特别聪明。它只是用服务器发送的新HTML替换所有子内容(想想
innerHTML=severStuff
)。因此,新创建的DOM元素“没有装饰”。需要在新的DOM元素上再次运行
.button()
magic


除非有更好的方法来处理这个问题,我不知道,这里有一个自动处理不同场景的方法。这是一种混乱和“黑客”,但它确实工作得相当好(我们使用一个修改过的版本)

用法可能如下所示(必须在[Update]UpdatePanel中,以便它在部分回发中工作):


//首先放置其他控件,因为这将按顺序呈现
//(通常应该是最后一个!)在正常/完整回发中。
//它将使用适当的“RegisterScript”进行部分回发。
//这里添加.button()内容-注意InlineScript是最后一个
//因此,前面的(控制)DOM节点已经存在于当前
//浏览器实现,即使本身没有“加载DOM”。。。
//或者--
jQuery(函数($){
//在此处添加.button()内容;在此处使用$.ready可能(?)
//实际上是让浏览器先更新UI。。。
//…但它将保证DOM完全加载。
})
这可以通过

它可以用于为dom中当前存在的所有元素以及以后添加的元素定义一个函数。。那会解决你的大部分问题

下面是一个示例用法:

$("#btnFindSearch").livequery(function(){$(this).button();})

这是关于.button的jquery ui文档,但由于应用程序的其他部分,我必须将它放在updatepanel中。特别是因为我使用的是jQueryUIDialog…如果您有一个jQueryUIDialog对象,并且您允许回发,那么对话框将关闭…因此您必须在updatepanel中执行这些操作。我能做些什么来再次“装饰”按钮吗???我是否应该查看
ScriptManager.RegisterClientScript
,然后在代码后面重新应用.button?@oJM86o这是一种方法。另一种方法是查看页面请求管理器。如果在每次回发后从JavaScript设置,我不确定UI体验会发生什么…您提到需要在新的DOM元素上再次运行.button()…问题是点击该按钮导致回发..如果我现在在服务器端,我到底在哪里可以回忆起.button()(代码隐藏页).@oJM86o
.button()
仅用于客户端。信息永远不会发送到服务器。点击按钮会触发回发,因为
AutoPostBack=true
(默认设置)。我想当我明天回到办公室时,我会考虑通过ScriptManager对象应用RegisterClient脚本……呃,我讨厌客户端与服务器端之间的通信使web开发变得更加困难!!!在哪里使用jquery live?这个答案没有多大意义。我知道什么是live,但它不能应用于这种情况-你读过我的帖子吗?这就是你想要的链接吗?@ParvSharma-live(处理事件冒泡)!=livequery——我更新了这篇文章。这确实奏效了——感谢一个简单得多的插件,虽然它是一个独立的插件,但我肯定可以在不久的将来用它来解决一些困扰我的其他问题。
$("#btnFindSearch").livequery(function(){$(this).button();})