月と年を保持する2つのドロップダウンリストがあります...
$(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が表示されます。しかし、私の見解では、現在の月が選択されていますが、現在の年はなぜですか?そして、ドロップダウンで現在の年を選択するにはどうすればよいですか?
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>
月は0(1月)から11(12月)までの整数として返されます。次を参照してください http://www.Java2s.com/Tutorial/JavaScript/0240__Date/DategetMonth.htm
したがって、現在の月(8月)は7を返します。通常の月のインデックス(1〜12)と一致させるには、_((new Date()).getMonth() + 1)
_を使用します。
コメントで指摘されたように、私は問題を誤解しました。月のゼロベースの配列とjqueryセレクター:eq()
もゼロベースであるため、月は正しいです。
ただし、他の回答で指摘されているように、返される年は、jqueryセレクターのn番目の要素と一致する:eq()
と一致しません。推奨されるoption[value=' + (new Date).getFullYear() + ')'
を使用することをお勧めします。
JQueryのセレクターの:eq(N)
部分は、一致するセット(その時点では_#Years option
_)のN番目の要素(0番目を含む)を選択します。したがって、Years
ドロップダウンに2012を超えるオプションがない限り、これは機能しません。
その値に基づいてオプションを選択することをお勧めします:_option[value=2012]
_または
$("#Years").val(2012)
を使用するだけで、コードが読みやすくなり、コードが少なくなります。