0

我有一个 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},我希望得到一个城市、街道和机场。如何澄清我的“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>
4

2 回答 2

1

jQuery 返回一个数组或匹配的对象,因此您需要使用loc[0].innerHTMLorloc.html()loc.text()代替loc(或ac分别)。

   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(来自浏览器中的页面源)更容易找到解决方案。

于 2013-05-16T21:06:21.740 回答
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)的 DOM 对象<td>

仅循环通过选中的复选框:

for (var i = 0; i < loc.length; i++) {
    alert(loc[i].innerHTML + " " + ac[i].innerHTML);
}

您无需选中复选框已选中,因为 jQuery 选择器已经为您执行此操作

于 2013-05-16T20:45:48.473 回答