2 つの要素change()
の jQuery でイベントをキャッチしようとしています。select
同じコードをカットアンドペーストする必要がないように、ループで実行しようとしています。
ただし、この行には問題がありますvar x = $("#"+fields[i]).val();
fields = ['foo', 'bar'];
for (var i=0; i < fields.length; i++)
{
$("#"+fields[i]).change(function () {
var x = $("#"+fields[i]).val();
alert(x);
});
}
<form>
<select id="foo">
<option value="first">first</option>
<option value="second">second</option>
</select>
<select id="bar">
<option value="third">third</option>
<option value="fourth">fourth</option>
</select>
</form>
編集
申し訳ありませんが、それは非常に単純化された例でした。私は実際に、たくさんのカットアンドペーストを行うことなく、近くのフィールドをたくさん取得したいと考えています。これが私の実際のコードです:
var fieldnames = ['start_date', 'end_date']
for (var i=0; i < fieldnames.length; i++)
{
var fieldname = fieldnames[i];
$("#event_"+fieldname+"_date, #event_"+fieldname+"_hour, #event_"+fieldname+"_minute, #event_"+fieldname+"_ampm").change(function(){
var d = $("#event_"+fieldname+"_date").val();
var h = $("#event_"+fieldname+"_hour").val();
var m = $("#event_"+fieldname+"_minute").val();
var ampm = $("#event_"+fieldname+"_ampm").val();
$("#event_"+fieldname).val(d + ' ' + h + ':' + m + ampm);
if ( $("#event_"+fieldname).val() == " :" ){
$("#event_"+fieldname).val("");
}
if (fieldname == "start_date")
{
$.validator.methods.validMoment.call(this, $("#event_"+fieldname).val(), $("#event_"+fieldname), null);
}else
{
$.validator.methods.validOptionalMoment.call(this, $("#event_"+fieldname).val(), $("#event_"+fieldname), null);
}
});
}
Javascript でトリックを行うことを心配する代わりに、Ruby でコードを生成するだけでよいと思いますが、興味があります...