我有一个asp.net gridview。 在其中我有2个像这样的ImageButtons:
<ItemTemplate>
<asp:ImageButton class="DeleteLineItem" style="display:none;" ID="ibDelete" runat="server" CommandName="DeleteRow" ImageUrl="images/d.gif"
ToolTip="Delete Line Item?" />
<asp:ImageButton class="TempDeleteLineItem" OnClientClick="return false;" runat="server" ToolTip="Delete Line Item?" ImageUrl="images/d.gif" />
</ItemTemplate>
请注意,第一个可见性设置为false,第二个可见OnClientClick="return false;"
以避免回帖...
我的目标是使用淡入淡出效果从gridview中删除一行,然后调用ibDelete后面的服务器端代码(第一个可见性设置为false的代码)。
$(".TempDeleteLineItem").click(function() {
$(this).closest("tr").fadeOut(5000, function() {
alert('hi1');
$(this).remove();
alert('hi2');
$(this).closest(".DeleteLineItem").trigger('click');
alert('hi3');
});
});
所有警报的显示和淡入淡出效果都有效,我没有收到脚本错误..但是点击事件没有触发。 我必须错误地使用trigger()?
我也试过
$(".TempDeleteLineItem").click(function() {
$(this).closest("tr").fadeOut(5000, function() {
alert('hi1');
$(this).prev(".DeleteLineItem").bind('click');
$(this).remove();
alert('hi2');
});
});
我已经尝试.trigger
而我已经尝试了.live
,所有这些似乎都是同一个问题。
我得到淡入淡出工作和删除工作,但点击事件似乎没有激发......
答案 0 :(得分:1)
当您将服务器端控件可见性设置为false时,不会呈现该控件的HTML,因此您的jquery甚至找不到控件而且没有触发器发生(检查页面的查看源,您将找不到图像按钮那里)。 您需要使控件隐藏使用CSS,而不是设置Visible =“false”,即在此按钮上设置一个css类,其显示为:none。然后它将以HTML格式呈现,你的jquery将触发事件。
答案 1 :(得分:1)
您的控件ibDelete为Visible="false"
,它不会在客户端呈现,因此无法通过javascript触发。一个简单的解决方案是用css隐藏它:
.DeleteLineItem { display: none; }
由于你的选择器似乎不起作用,它可能是:
$(this).closest ('tr').find ('.DeleteLineItem').trigger ('click');
假设网格在表中呈现,没有嵌套表。
如果它选择按钮但仍未触发回发,请尝试复制功能中生成的onclick
,如下所示:
WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("some$naming$container$ibDelete", "", true, "", "", false, false));
这会手动激发回帖。
请注意,最正确实现此方法的方法是编写实现IPostBackEventHandler
的自己的WebControl,并在淡出后编写客户端调用__doPostBack (...);
。
答案 2 :(得分:1)
您正在寻找prev(),如下所示:$(this).prev('.DeleteLineItem').trigger('click')
nearest()=“获取与选择器匹配的第一个祖先元素,从当前元素开始并逐步向上遍历DOM树。”
此外,我不知道你的asp在生成时会是什么样子,很高兴告诉我:)我在PHP方面......
答案 3 :(得分:0)
尝试
.live('click',function(){/*.. function */})
和
.bind('click',function(){/*.. function */})
看看它们是否能提供更好的效果
live()
现在已被弃用,您应该使用.delegate
代替。 http://api.jquery.com/delegate/
对于较新版本的jQuery(1.7+),您应该使用.on()
http://api.jquery.com/on/
如果您阅读.on()
注意事项,您会发现不再推荐.live()
用于任何版本。这里有一些严重的问题已经在很多帖子中概述过了。
答案 4 :(得分:0)
我认为您不想触发按钮单击,因为这会使您的页面重新加载,这会使漂亮的渐变变得毫无意义。您需要使用WCF或MS AJAX工具向服务器添加ajax方法。然后通过jQuery的ajax方法调用它,让它在服务器上执行删除。
答案 5 :(得分:0)
您是否有理由需要使用JS / jQuery触发按钮?我可能在这里错过了细微差别,但似乎你可以简单地将OnClientClick =“doFadeEffect(this)”添加到你的ibDelete图像按钮。当他们点击它时,doFadeEffect将被调用,你将有机会淡出该行。然后只要doFadeEffect返回true,回发就会正常发生。
答案 6 :(得分:0)
尝试.live()
对于Jquery的最新版本应该使用如下:1.9及更高版本
$('body').on('click', '.myButton', function)
点击此链接了解该功能的最新用途。 jQuery 1.9 .live() is not a function