2

我正在创建一个每年进行的调查。为了让它更快,我想要一个按钮,它会自动从前一年的调查的下拉列表中选择答案(这个答案可以作为表格中前一个单元格(同一行)的跨度提供)。因为这个表可以有数百行,所以我不能使用特定的 id/name 选择器。我想要做的是将位于超链接之前的跨度存储在一个变量中,然后使用它在超链接后面的单元格中选择一个选项

查询:

<script type="text/javascript">
     $(function () {
         $("[id$='lbCopy']").click(
            function () {
                var $prevReason = $(this).parent().prev().children().text();
                $(this).parent().next().children('select > option:contains("' + $prevReason + '")').prop("selected", true); 
            })
     });
</script>

HTML:

<td>
    <span id="ctl00_body_gvBacklog_ctl02_lblPrevYearReason">Recalcitrant RP</span>
</td>
<td>
    <a id="ctl00_body_gvBacklog_ctl02_lbCopy">Copy</a>
</td>
<td>
    <select name="ctl00$body$gvBacklog$ctl02$ddlReasonNotClosed" id="ctl00_body_gvBacklog_ctl02_ddlReasonNotClosed">
        <option value=""></option>
        <option value="Contamination Above Standards">Contamination Above Standards</option>
        <option value="Recalcitrant RP">Recalcitrant RP</option>
        <option value="Remediation Ongoing">Remediation Ongoing</option>
        <option value="SMAC Eligible">SMAC Eligible</option>
        <option value="SMAC Eligible w/MW Closure">SMAC Eligible w/MW Closure</option>
        <option value="SMAC Eligible w/Notice">SMAC Eligible w/Notice</option>
    </select>
</td>

无论出于何种原因,这都行不通。我没有收到任何错误,但下拉列表没有被修改。我知道我的选择器是可靠的,因为我可以使用它来更改所有下拉列表的选项,而不是相邻的下拉列表。谢谢您的帮助!

4

3 回答 3

1

children仅选择向下一级的元素,您正在尝试选择后代,因此请find改用。

$(this).parent().next().find('select > option:contains("' + $prevReason + '")').prop("selected", true);
于 2013-05-30T14:24:02.133 回答
0

这适用于您问题的 HTML 代码:

http://jsfiddle.net/ehrGk/

$(function () {
    $("[id$='lbCopy']").click(

    function () {
        var $prevReason = $(this).prev().text();
        $(this).next().find('option:contains("' + $prevReason + '")').prop("selected", true);
    })
});
于 2013-05-30T14:27:14.090 回答
0

有很多方法可以做到这一点,至于我,我会尽量避免在选择器内有变量

  $(function () {
         $("[id$='lbCopy']").click(
            function () {
                var $prevReason = $(this).parent().prev().children().text();

                $(this).parent().next().find('option').filter(function(){ 
                    return $(this).html() == $prevReason; 
                }).prop("selected", true); 

            })
     });
于 2013-05-30T14:38:22.537 回答