我有一个包含三列或字段的Datalist: 第1栏:一些数据 第2列:链接按钮更新 第3栏:div" divCheck",默认情况下隐藏。
<asp:DataList ID="MyDataList" runat="server" EnableViewState="True">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<table width="100%">
<tr id="ItemRow" runat="server">
<td >
<%# DataBinder.Eval(Container.DataItem, "some_data")%>
</td>
<td >
<asp:LinkButton Text="Update" class="lnk_showCheck" CommandName="update" Runat="server" ID="update" />
</td>
<td >
<div id="divCheck" style="display: none">Check</div>
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
这个想法是,当点击任何一行的linkbutton时,它必须触发服务器端函数并调用jquery函数ShowCheck。
Protected Sub MyDataList_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) Handles MyDataList.ItemCommand
If e.CommandName = "update" Then
Dim script As String = "<script language='javascript'> ShowCheck();</script>"
Page.ClientScript.RegisterStartupScript(Me.[GetType](), "ShowCheck", script, False)
End If
End Sub
Jquery ShowCheck()必须在该行中显示divCheck。
<script type="text/javascript">
function ShowCheck() {
//alert($(this).get(0).tagName);
$('div', $(this).closest("td").next()).show();
};
</script>
问题是$(this)作为未定义的对象传递。它应该作为DataList中的LinkButton对象传递。
这可能吗?当从服务器端函数触发时,jquery如何在Table行中找到divCheck?
答案 0 :(得分:1)
你可以试试下面的代码吧......
Protected Sub MyDataList_ItemCommand(source As Object, e As DataListCommandEventArgs)
If e.CommandName = "update" Then
Dim linkButton As LinkButton = TryCast(e.CommandSource, LinkButton)
Page.ClientScript.RegisterStartupScript(Me.[GetType](), "Shows", "ShowCheck(" + linkButton.ClientID + ");", True)
End If
End Sub
脚本代码
function ShowCheck(controlid) {
$('div', $(controlid).closest("td").next()).show();
}
答案 1 :(得分:0)
您可以在div中添加runat attribute
<div id="check" runat="server" style="display: none">Check</div>
然后在两个函数中替换此行
$('div', $(this).closest("td").next()).show();
这个
$('#<%=check.ClientID %>').show();