Javascript 动态计算if函数

Javascript 动态计算if函数,javascript,jquery,Javascript,Jquery,我有一些计算功能 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

我有一些计算功能

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);
只有当我更改get_car中的数据时,它才会更改

工作示例:

问题如下:

我有一个预订表单,在这里我使用日期选择器,我有两个日期框:开始和结束,以及两个带有可用城市列表的选择表单字段。根据所选日期,脚本计算天数

如果天数少于4天,则在其中一个选定城市列表上,第二个城市2会更改活动城市的可用性,并自动选择第一个列表城市1中选定的城市。因此,如果我们在第一个列表中选择城市–例如卡托维兹,并且第二个列表中的天数少于4天,脚本将自动标记卡托维兹城市,其他城市将被禁用


当天数大于4天时,问题开始出现。这两个列表都处于完全活动状态,您可以选择任何城市,不受限制。如果选择不同的城市,然后更改日期,并且天数下降到3天(例如),则整个脚本应重新计算值,并在第二个窗口中进行设置,第一个窗口中选择的城市City1=City2。不幸的是,这并没有发生。此外,在第二个列表中,您可以选择任何城市–所有城市都处于活动状态。仅当您从第一个列表中选择城市时,整个脚本才会重新计算。

由于数据是只读的,任何人都无法在finish_day中更改数据。您需要触发$finish\u day.change;但问题是什么?是compute更改了值,因此当数据更改时无需调用compute,因为compute更改了它。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();
  });
}