我正在尝试访问Gridview
中的文本框并添加单击事件。我在Gridview
之外的文本框中添加了一个click事件,使用jQuery
没有问题。
<asp:TextBox ID = "dcrTxtBoxAll" runat="server"
style="Z-INDEX: 120; LEFT: 783px; POSITION: absolute; TOP: 111px; width: 432px; height: 71px;"
ClientIDMode="Static"
Text='<%# Bind("Description") %>'
Visible="false"
TextMode="MultiLine">
</asp:TextBox>
JavaScript
<script type="text/javascript" src="jquery-3.7.1.js"></script>
<script type="text/javascript">
// This function adds a click listener to the dcrTxrBoxAll textbox. When the textbox is clicked the update button and the GridView Rows textboxes are disabled
$("#dcrTxtBoxAll").on('click', function()
{
$("#cmdUpdate").val('Update All'); // Changed the button text
// Loop through the GridView and disable each text box
$("#GridView1 tr").each(function ()
{
var $this = $(this);
var $dcrTextBox = $("#dcrTextBox", $this); // Get the textbox at each row
$dcrTextBox.prop("disabled", true); // Disable the textbox
});
$("*").unbind("click"); // Removes all click handlers added by javascript from every element
$("[onclick]").removeAttr("onclick"); // Finds all elements with an 'onclick' attribute, and removes that attribute
});
</script>
我尝试了类似的方法,但我不能让它工作。
以下是GridView
:
<asp:GridView ID="GridView1"
runat="server"
style="Z-INDEX: 120; LEFT: 410px; POSITION: absolute; TOP: 244px; width: 698px; height: 251px;"
BackColor="DeepSkyBlue"
AutoGenerateColumns="False"
BorderStyle="Solid"
BorderColor="Black"
AllowSorting="True"
PageSize="15"
AllowMultiRowSelection="true"
ShowHeaderWhenEmpty="true"
GridLines="None">
<RowStyle backcolor="White" />
<SelectedRowStyle BackColor="Yellow" />
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="ChkHeader"
runat="server"
AutoPostBack="true"
OnCheckedChanged="ChkHeader_CheckedChanged" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="ChkEmpty"
runat="server"
AutoPostBack="true"
OnCheckedChanged="ChkEmpty_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="RequestorId"
HeaderText="Requestor Id"
ReadOnly="True">
</asp:BoundField>
<asp:BoundField DataField="FileName"
HeaderText="File Name"
ReadOnly="True">
</asp:BoundField>
<asp:BoundField DataField="FolderName"
HeaderText="Sub Folder Name"
ReadOnly="True">
<HeaderStyle HorizontalAlign="Center"
Width="24px"
VerticalAlign="Middle"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="ModifiedDt"
HeaderText="Uploaded Dt"
ReadOnly="True">
<HeaderStyle HorizontalAlign="Center"
Width="48px"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<HeaderStyle HorizontalAlign="Center"
Width="96px" />
<ItemStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:TemplateField HeaderText="Description of Change/Reason"
ItemStyle-Width="300px">
<ItemTemplate>
<asp:Label ID="dcrLabel"
runat="server"
Text='<%# Bind("Description") %>'></asp:Label>
<asp:TextBox ID="dcrTextBox"
runat="server"
ClientIDMode="Static"
Text='<%# Bind("Description") %>'
Visible="false"
TextMode="MultiLine"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
这是我试图访问GridView
中的文本框。我好像没办法让它记录点击声。
<script type="text/javascript">
$('#dcrTextBox').on('click', function() {
alert('Hello');
});
</script>`
1条答案
按热度按时间cs7cruho1#
这个文本框的ID是“dcrTextBox”。
但是,由于它在GridView中重复了很多次,那么上面的内容将引用TextBox的哪一行和哪一个示例?
请记住,HTML标准是不允许控件在同一页面上具有相同的ID。因此,如果您有10行,那么您将在标记中看到10行,并且该行上的每个控件都有自己的自动生成的ID。
然而,当一个控件,一个文本框,或只是任何控件到网页?
为什么要使用jQuery将一些事件连接到控件?我看不出有真实的理由这样做,现在你有更难阅读的标记,因为你有一个按钮,或者像文本框一样的控件,现在在那个页面的标记中有一些其他的地方,你必须知道,必须找到,必须寻找连接那个事件的jQuery。因此,对于按钮或文本框,在大多数情况下,最好将事件添加到控件中。
因此,当开发人员查看该控件时,您可以看到某个事件附加到该控件。因此,你不必去页面上的其他地方去知道/看到/发现一些jQuery代码现在决定将一些事件连接到该控件。这增加了开发人员的上下文和脑力工作量,并使调试此类页面变得相当困难。
你要说清楚吗?jQuery能够在页面上附加和连接控件事件,并对许多控件这样做,这是jQuery的一个非常棒的特性。因此,我强烈建议使用jQuery选择器来连接页面上的事件。
但是,如果不需要选择多个控件并将事件连接到这些控件的能力,则只需使用在给定控件的标记中定义的常规普通Jane事件。
为文本框定义点击事件的几个额外结果之一是,我们可以自由地传递给定点击事件的附加参数。
所以,我们可以让标记像这样说:
因此,在上面我们传递控件“this”,我们传递数据库行PK id,我们传递行索引。
因此,上面的标记是这样的GridView的一部分:
加载代码:
我们现在得到了这个结果:
因此,既然GridView控件为您“重复”了该文本框,那么不妨在标记中简单地添加一次单击事件。如上所示,这有一个额外的优点,可以传递数据库PK ID、行索引等值,当然还可以使用“this”作为传递的控件。