我有一个asp.net web应用程序,有一个更新面板。在更新面板中,我有一个网格视图控件。在网格视图控件中,我有两个按钮,注意可见度:
<ItemTemplate>
<asp:ImageButton class="DeleteLineItem" style="display:none;" ID="ibDelete2" runat="server" CommandName="DeleteRow" ImageUrl="images/d.gif" ToolTip="Delete Line Item?" />
<asp:ImageButton class="TempDeleteLineItem" ID="ibTempDelete" OnClientClick="return false;" runat="server" ToolTip="Delete Line Item?" ImageUrl="images/d.gif" />
</ItemTemplate>
注意第一个显示设置为none
,我这样做的原因是你会注意到第二个有一个onclientclick="return false;"。当我点击按钮id ibTempDelete它调用一些jquery从我的gridview中删除一行,然后它触发点击事件的ibDelete2
按钮(一个隐藏)。jquery在这里:
$(".TempDeleteLineItem").click(function() {
$(this).closest("tr").fadeOut(3000, function() {
alert('hi');
__doPostBack($(this).closest ('tr').find ('.DeleteLineItem').attr('name'), "");
$(this).remove();
});
});
我找到该行并将其淡出,通过调用DeleteLineItem事件并删除该行来进行回发。现在,当我第一次加载我的网页(假设有3条记录在网格视图)。当我的页面加载时,我可以很容易地点击ibTempDelete
按钮,它调用jquery,淡出行,警报嗨,帖子回来并删除行…它基本上有效!很好,那我的问题是什么?
我的问题是在这篇文章回来后立即(现在我在我的网格视图中有2行),如果我尝试点击ibTempDelete
按钮什么都没有发生,似乎它不再是可点击的?
所以我的问题是我对asp.net和回发是如何工作的缺乏理解。当我点击第一个回发按钮时,为什么这个按钮不再可点击?
当你调用__doPostBack
时,页面无论如何都会刷新,为什么你调用$(this).remove()
。也许你可以在调用__doPostBack
之前调用它。当页面刚刚加载时,即使在回发之后,事件处理程序也应该按原样工作。请使用live.
$(".TempDeleteLineItem").live('click', function() {
$(this).closest("tr").fadeOut(3000, function() {
$(this).hide().find('.DeleteLineItem').click();
});
});
Shankar在聊天中帮助了我,我们最终这样做了:
$(".TempDeleteLineItem").live('click', function() {
var $this = $(this);
$(this).closest("tr").fadeOut(1000, function() {
$(this).hide();
$this.prev('.DeleteLineItem').click();
});
return false;
});