13

我有两个包含几个月和几年的下拉列表......

$(document).ready(function () {               
     $('#Months option:eq(' + (new Date).getMonth() + ')').prop('selected', true);
      alert((new Date).getMonth());        
     $('#Years option:eq(' + (new Date).getFullYear() + ')').prop('selected', true);
      alert((new Date).getFullYear());
});

我如上所述编写了 JQuery 脚本,这样当我的程序运行下拉列表时,选择的值必须是当前月份和年份。

但是当我执行程序时..警报给出了 7 和 2012.. 但在我看来当前月份被选中但当前年份不是为什么?以及如何使我的下拉列表选择当前年份?

4

3 回答 3

28

jQuery

var d = new Date(),

    n = d.getMonth(),

    y = d.getFullYear();

$('#months option:eq('+n+')').prop('selected', true);

$('#years option[value="'+y+'"]').prop('selected', true);

HTML

​<select id="months">
    <option value="1">January</option>
    <option value="2">February</option>
    <option value="3">March</option>
    <option value="4">April</option>
    <option value="5">May</option>
    <option value="6">June</option>
    <option value="7">July</option>
    <option value="8">August</option>
    <option value="9">September</option>
    <option value="10">October</option>
    <option value="11">November</option>
    <option value="12">December</option>
</select>
<select id="years">
    <option value="2011">2011</option>
    <option value="2012">2012</option>
    <option value="2013">2013</option>
</select>

演示

于 2012-08-26T09:59:17.877 回答
2

月份以整数形式返回,从 0(一月)到 11(十二月):参见http://www.java2s.com/Tutorial/JavaScript/0240__Date/DategetMonth.htm

因此,当前月份(八月)将返回 7。为了能够与通常的月份索引(即 1 到 12)匹配,请使用((new Date()).getMonth() + 1).

正如评论中指出的那样,我误解了这个问题。月份是正确的,因为月份的数组从零开始,并且 jquery 选择器:eq()也是从零开始的。

:eq()但是,正如其他答案中所指出的,返回的年份与 jquery 选择器中的第 n 个元素不匹配。按照建议使用option[value=' + (new Date).getFullYear() + ')'会更好。

于 2012-08-26T09:57:55.373 回答
1

jQuery 中的:eq(N)选择器部分选择匹配集合中的第 N 个元素(包括第 0 个)(此时为#Years option)。因此,除非您在下拉列表中有超过 2012 年的选项,否则Years这是行不通的。

最好根据其价值选择选项:option[value=2012]

只需使用$("#Years").val(2012),它的可读性更高,代码更少。

于 2012-08-26T09:59:31.290 回答