我有一个GridView,我需要抓住第1列和第2列(其中的文本)并将该文本放在页面的另一个文本框中。
这是我到目前为止所做的:
var checked = $('input:checkbox').click(function(e) {
//place airport in textbox, txtAirport
var loc = $("tr:has(:checkbox:checked) td:nth-child(1)");
var ac = $("tr:has(:checkbox:checked) td:nth-child(2)");
// txtAirport.Text = loc + ac;
$("#<%= txtAirport.ClientID%>").val(loc + ac);
});
问题是我在我的文本框中得到{Object object} {Object object},我希望得到一个城市,st和一个机场。如何澄清我的“loc”和“ac”变量以给我我需要的东西?我试过.text和.val()无济于事。
这是HTML(ASP.NET Gridview):
<asp:DataGrid ID="dgSearch" runat="server" AllowPaging="False" AllowSorting="False"
CellPadding="3" CellSpacing="2" ShowFooter="False" GridLines="None" AutoGenerateColumns="false">
<AlternatingItemStyle Wrap="False" CssClass="HeaderRowAlternate"></AlternatingItemStyle>
<ItemStyle Wrap="False"></ItemStyle>
<HeaderStyle Font-Bold="True" Wrap="False" CssClass="HeaderRowStyle"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="Select">
<HeaderStyle CssClass="HEADERSTYLE"></HeaderStyle>
<ItemTemplate>
<asp:CheckBox ID="chkLookup" runat="server" CssClass="checkbox"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn Visible="False" DataField="AirportID"></asp:BoundColumn>
<asp:BoundColumn Visible="False" DataField="City"></asp:BoundColumn>
<asp:BoundColumn DataField="Loc" HeaderText="Location">
<HeaderStyle Wrap="False" CssClass="HEADERSTYLE"></HeaderStyle>
<ItemStyle Wrap="False"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="AirportCode" HeaderText="Airport Code">
<HeaderStyle Wrap="False" CssClass="HEADERSTYLE"></HeaderStyle>
<ItemStyle Wrap="False"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="AirportName" HeaderText="Airport Name">
<HeaderStyle Wrap="False" CssClass="HEADERSTYLE"></HeaderStyle>
<ItemStyle Wrap="False"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="MilesFromSource" HeaderText="Distance">
<HeaderStyle Wrap="False" CssClass="HEADERSTYLE"></HeaderStyle>
<ItemStyle Wrap="False"></ItemStyle>
</asp:BoundColumn>
</Columns>
</asp:DataGrid>
答案 0 :(得分:1)
jQuery选择器返回包含所选DOM元素的包装集,因此您需要使用.text()或.html()
编辑:好的,我已经复制了你的代码,你需要的是
$("tr:has(:checkbox:checked) td:nth-child(2)");
$("tr:has(:checkbox:checked) td:nth-child(3)");
然后去做
$("#<%= txtAirport.ClientID%>").val(loc[0].innerHTML + ac[0].innerHTML);
这将为您提供第一行(loc [1]和第二行的ac [1]等)的第一列和第二列(在复选框之后)中的文本。您遇到的问题是td:nth-child(0)
正在返回复选框的<td>
元素的DOM对象
仅循环选中复选框:
for (var i = 0; i < loc.length; i++) {
alert(loc[i].innerHTML + " " + ac[i].innerHTML);
}
您不需要选中复选框,因为jQuery选择器已经为您执行了此操作
答案 1 :(得分:1)
jQuery返回一个数组或匹配的对象,因此您需要使用loc[0].innerHTML
或loc.html()
或loc.text()
而不是loc
(或ac
)。< / p>
var checked = $('input:checkbox').click(function(e) {
//place airport in textbox, txtAirport
var loc = $("tr:has(:checkbox:checked) td:nth-child(2)");
var ac = $("tr:has(:checkbox:checked) td:nth-child(3)");
// txtAirport.Text = loc + ac;
$("#<%= txtAirport.ClientID%>").val(loc.html() + ac.html());
});
可能还需要更改细胞数量(1,2 - > 2,3),请参阅http://jsfiddle.net/vXtKq/ 可能是您的选择器不够具体,但如果您发布高级代码的结果或呈现 HTML(从浏览器中的页面源),则更容易找到解决方案。