在jQuery中单击()可以触发服务器端按钮

时间:2011-08-11 12:37:25

标签: jquery asp.net gridview

我有一个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,所有这些似乎都是同一个问题。 我得到淡入淡出工作和删除工作,但点击事件似乎没有激发......

7 个答案:

答案 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