同じjQueryとJSON ASP.NET MVC3 メソッドを 2 つの異なる<select>
要素にアタッチしようとしています。
<select id="StartYear">
<option value="">Select Year</option>
<option value="2000">2000</option>
<option value="2001">2001</option>
</select>
<select id="StartMonth">
<option value="">Select Month</option>
</select>
ID が"EndYear"および"EndMonth<select>
" の要素にも同じことが当てはまります。
「開始年」と「終了年」の両方に同じjQuery関数をアタッチしたい:
$('[id$="Year"]').change(function () {
var selectedYear = $(this).val();
var selectedId = $(this).attr('id')
if (selectedYear != null && selectedYear != '') {
$.getJSON('@Url.Action("Months")', { year: selectedYear }, function (months) {
var monthsSelect = $('#StartMonth');
if (selectedId == 'EndYear') {
monthsSelect = $('#EndMonth');
}
monthsSelect.empty();
daysSelect.prepend("<option text='-- select month --' value='' selected='selected'></option>");
$.each(months, function (index, month) {
monthsSelect.append($('<option/>', {
value: month.value,
text: month.text
}));
});
});
}
});
ただし、このコードは機能しません。Bugzilla でデバッグしたところ、この状態(selectedId == 'EndYear')
で機能が壊れていることがわかりました。変数 selectedId はクロージャー スコープにありますが、関数スコープ内に移動する方法がわかりません。そうしないと、何が原因なのかわかりません。その条件がなくてもコードは機能していたことに注意してください (もちろん、#StartMonth だけで)