関数にいくつかの計算がありcompute
ます。
function compute() {
var c = $('select#time_from_hour').val();
var d = $('select#time_from_minute').val();
var e = $('select#time_to_hour').val();
var f = $('select#time_to_minute').val();
var g = $('input#date_from').val();
var h = $('input#date_to').val();
var hour1 = g + ' ' + c + ':' + d;
var hour2 = h + ' ' + e + ':' + f;
hour1 = hour1.split("/");
var hour1 = hour1[1] + "," + hour1[0] + "," + hour1[2];
var timestamp = (new Date(hour1).getTime() / 1000) + 7200;
$('#total_hour1').val(timestamp);
hour2 = hour2.split("/");
var hour2 = hour2[1] + "," + hour2[0] + "," + hour2[2];
var timestamp = (new Date(hour2).getTime() / 1000) + 7200;
$('#total_hour2').val(timestamp);
var x = -$('input#total_hour1').val();
var y = -$('input#total_hour2').val();
var total_time = x - y;
result = total_time / 86400;
new_number = Math.ceil(result);
if (isNaN(new_number)) {
var new_number = 0;
}
$('#finish_day').val(new_number);
if (parseInt($("#finish_day").val()) < 4) {
$('#get_car, #return_car').not(this).children('#return_car option[value=' + this.value + ']').attr('selected', true).siblings().attr('disabled', true);
$('#three_day').show(2000);
} else {
$('#get_car > option, #return_car > option').prop('disabled', false);
$('#three_day').hide(2000, function() {
$(this).remove();
});
}
}
$('select#time_from_hour').change(compute);
$('select#time_from_minute').change(compute);
$('select#time_to_hour').change(compute);
$('select#time_to_minute').change(compute);
$('select#return_car').change(compute);
$('select#get_car').change(compute);
$('input#finish_day').change(compute);
if
入力フィールドのデータ#finish_day
が変更されたときに、スクリプトが関数を動的に再計算するように強制しようとしています。
if (parseInt($("#finish_day").val()) < 4) {
$('#get_car, #return_car').not(this).children('#return_car option[value=' + this.value + ']').attr('selected', true).siblings().attr('disabled', true);
$('#three_day').show(2000);
} else {
$('#get_car > option, #return_car > option').prop('disabled', false);
$('#three_day').hide(2000, function() {
$(this).remove();
});
}
データを変更したときにのみ変更されました#get_car
作業例: http://jsfiddle.net/amarcinkowski/W7NHK/25/
問題は次のとおりです。
日付ピッカーを使用する予約フォームがあります。ここには、開始と終了の 2 つの日付ボックスと、利用可能な都市のリストを含む 2 つの選択フォーム フィールドがあります。選択した日付に応じて、スクリプトは日数を計算します。
日数が 4 未満の場合、都市の選択リストの 1 つ (2 番目 - City2) でアクティブな都市の可用性が変更され、最初のリスト (City1) で選択された都市が自動的に選択されます。たとえば、最初のリストの都市でカトヴィツェを選択し、2 番目のリストで日数が 4 未満の場合、スクリプトは自動的にカトヴィツェの都市をマークし、他の都市は非アクティブ (無効) になります。
日数が 4 日を超えると問題が発生します。どちらのリストも完全にアクティブで、制限なしで任意の都市を選択できます。別の都市を選択してから日付を変更し、日数が 3 に減少した場合 (たとえば)、スクリプト全体で値が再計算され、最初のウィンドウで選択された都市 (City1 = City2) が 2 番目のウィンドウに設定されます。残念ながら、これは起こりません。さらに、2 番目のリストでは、任意の都市を選択できます。すべてがアクティブです。最初のリストから都市を選択した場合にのみ、スクリプト全体が再計算されます。