简体   繁体   English

Javascript / jQuery-如何调用切换案例以从另一个函数执行

[英]Javascript/jQuery - how to call a switch case to execute from another function

I am wondering if it is possible to call a switch case from another function. 我想知道是否可以从另一个函数中调用一个开关案例。 On my page user has a possibility to select predefined time intervals with element $("#timeInterval") and one of the options is to choose dates from datepicker, which is not visible by default. 在我的页面上,用户可以选择带有元素$("#timeInterval")预定义时间间隔,并且选项之一是从datepicker中选择日期,默认情况下该日期不可见。 Based on those dates I am creating charts. 基于这些日期,我正在创建图表。 Since I have few charts that are also available on select element, I need to make sure they get the correct dates, either form select option, or datepicker. 由于在选择元素上也没有可用的图表,因此我需要确保它们获得正确的日期,无论是选择选项还是日期选择器。 My problem now is that I need to check if the datepicker is visible I can get dates from it, if not, I should get the selected option and execute functions with dates for that case. 我现在的问题是,我需要检查日期选择器是否可见,我可以从中获取日期,否则,我应该获取所选的选项并针对该情况执行带有日期的功能。

This is my code: 这是我的代码:

$("#timeInterval").change(function() {

    var date = moment().format("YYYY-MM-DD");
    var yesterday = moment().subtract(1, 'day').format('YYYY-MM-DD');
    var tomorrow = moment().add(1, 'day').format('YYYY-MM-DD');
    var sevenDaysAgo = moment().subtract(7, 'day').format('YYYY-MM-DD');
    var thirtyDaysAgo = moment().subtract(29, 'day').format('YYYY-MM-DD');
    var lastWeekStart = moment(date).weekday(-6).format('YYYY-MM-DD');
    var lastWeekEnd = moment(date).weekday(1).format('YYYY-MM-DD');
    var thisWeekStart = moment(date).weekday(1).format('YYYY-MM-DD');
    var startOfMonth = moment().startOf('month').format('YYYY-MM-DD');
    var startOfLastMonth = moment().subtract(1, 'month').startOf('month').format('YYYY-MM-DD');
    var endOfLastMonth = moment().subtract(1, 'month').endOf('month').format('YYYY-MM-DD');

    switch($("#timeInterval").val()) {
      case "allTime":
        $(".datePickers").hide();
        timelines(0, 0);
        barCharts(0, 0);
        $( "#list" ).empty();
        mostArticles(0, 0);
        break;
      case "today":
        $(".datePickers").hide();
        timelines(date, tomorrow);
        barCharts(date, tomorrow);
        $( "#list" ).empty();
        mostArticles(date, tomorrow);
        break;
      case "yesterday":
        $(".datePickers").hide();
        timelines(yesterday, date);
        barCharts(yesterday, date);
        $( "#list" ).empty();
        mostArticles(yesterday, date);
        break;
      case "lastSevenDays":
        $(".datePickers").hide();
        timelines(sevenDaysAgo, date);
        barCharts(sevenDaysAgo, date);
        $( "#list" ).empty();
        mostArticles(sevenDaysAgo, date);
        break;
      case "lastThirtyDays":
        $(".datePickers").hide();
        timelines(thirtyDaysAgo, tomorrow);
        barCharts(thirtyDaysAgo, tomorrow);
        $( "#list" ).empty();
        mostArticles(thirtyDaysAgo, tomorrow);
        break;
      case "thisWeek":
        $(".datePickers").hide();
        timelines(thisWeekStart, tomorrow);
        barCharts(thisWeekStart, tomorrow);
        $( "#list" ).empty();
        mostArticles(thisWeekStart, tomorrow);
        break;
      case "lastWeek":
        $(".datePickers").hide();
        timelines(lastWeekStart, lastWeekEnd);
        barCharts(lastWeekStart, lastWeekEnd);
        $( "#list" ).empty();
        mostArticles(lastWeekStart, lastWeekEnd);
        break;
      case "thisMonth":
        $(".datePickers").hide();
        timelines(startOfMonth, date);
        barCharts(startOfMonth, date);
        $( "#list" ).empty();
        mostArticles(startOfMonth, date);
        break;
      case "lastMonth":
        $(".datePickers").hide();
        timelines(startOfLastMonth, endOfLastMonth);
        barCharts(startOfLastMonth, endOfLastMonth);
        $( "#list" ).empty();
        mostArticles(startOfLastMonth, endOfLastMonth);
        break;
      default:
        $(".datePickers").show();
      }
  });

$('#datePicker').fdatepicker({
        closeButton: false,
    initialDate: weekBack,
        format: 'dd.mm.yyyy',
    endDate: dayBack,
    }).on('changeDate', function (ev) {
      var dateFrom = $("#datePicker").val().split(".").reverse().join("-");
      var dateTo = $("#datePicker1").val().split(".").reverse().join("-");
        timelines(dateFrom, dateTo);
      barCharts(dateFrom, dateTo);
      $( "#list" ).empty();
      mostArticles(dateFrom, dateTo);
  });

  $('#datePicker1').fdatepicker({
        closeButton: false,
    initialDate: date,
        format: 'dd.mm.yyyy',
    endDate: date,
    }).on('changeDate', function (ev) {
    var dateFrom = $("#datePicker").val().split(".").reverse().join("-");
    var dateTo = $("#datePicker1").val().split(".").reverse().join("-");
    timelines(dateFrom, dateTo);
    barCharts(dateFrom, dateTo);
    $( "#list" ).empty();
    mostArticles(dateFrom, dateTo);
  });

  //timeline charts
  $("#timelines").on("change", function() {
    if ($("#datePicker").is(":visible")){
      var dateFrom = $("#datePicker").val().split(".").reverse().join("-");
      var dateTo = $("#datePicker1").val().split(".").reverse().join("-");
    }
    else{
      console.log($( "#timeInterval" ).val());

    }
    timelines(dateFrom, dateTo);
  }).trigger("change");

Yes its possible. 是的,它有可能。 Put your switch in a function; 将您的开关置于功能中; call it something like DoTimeIntervalWork or something. 称之为DoTimeIntervalWork之类的东西。 Inside that function you can do what you need to do. 在该函数中,您可以执行所需的操作。 Make sure you pass in or otherwise access the value of $("#timeInterval").val() in order to make it work properly. 确保传递或以其他方式访问$("#timeInterval").val() ,以使其正常工作。 All that matters is that your calls to timelines(yesterday, date); 重要的是您对timelines(yesterday, date);调用timelines(yesterday, date); and barCharts(yesterday, date); barCharts(yesterday, date); and other function calls are available inside the function. 和其他函数调用在函数内部可用。 If they're not, you can have your switch return a function object that is then called by the caller of DoTimeIntervalWork. 如果不是,则可以让您的开关返回一个函数对象,然后由DoTimeIntervalWork的调用方调用该对象。

$("#timeInterval").change(function() {

var date = moment().format("YYYY-MM-DD");
var yesterday = moment().subtract(1, 'day').format('YYYY-MM-DD');
var tomorrow = moment().add(1, 'day').format('YYYY-MM-DD');
var sevenDaysAgo = moment().subtract(7, 'day').format('YYYY-MM-DD');
var thirtyDaysAgo = moment().subtract(29, 'day').format('YYYY-MM-DD');
var lastWeekStart = moment(date).weekday(-6).format('YYYY-MM-DD');
var lastWeekEnd = moment(date).weekday(1).format('YYYY-MM-DD');
var thisWeekStart = moment(date).weekday(1).format('YYYY-MM-DD');
var startOfMonth = moment().startOf('month').format('YYYY-MM-DD');
var startOfLastMonth = moment().subtract(1, 'month').startOf('month').format('YYYY-MM-DD');
var endOfLastMonth = moment().subtract(1, 'month').endOf('month').format('YYYY-MM-DD');

DoTimeIntervalWork($("#timeInterval").val())
  });

$('#datePicker').fdatepicker({
    closeButton: false,
initialDate: weekBack,
    format: 'dd.mm.yyyy',
endDate: dayBack,
}).on('changeDate', function (ev) {
  var dateFrom = $("#datePicker").val().split(".").reverse().join("-");
  var dateTo = $("#datePicker1").val().split(".").reverse().join("-");
    timelines(dateFrom, dateTo);
  barCharts(dateFrom, dateTo);
  $( "#list" ).empty();
  mostArticles(dateFrom, dateTo);
});

  $('#datePicker1').fdatepicker({
    closeButton: false,
initialDate: date,
    format: 'dd.mm.yyyy',
endDate: date,
}).on('changeDate', function (ev) {
var dateFrom = $("#datePicker").val().split(".").reverse().join("-");
var dateTo = $("#datePicker1").val().split(".").reverse().join("-");
timelines(dateFrom, dateTo);
barCharts(dateFrom, dateTo);
$( "#list" ).empty();
mostArticles(dateFrom, dateTo);
  });

//timeline charts
$("#timelines").on("change", function() {
 if ($("#datePicker").is(":visible")){
   var dateFrom = $("#datePicker").val().split(".").reverse().join("-");
   var dateTo = $("#datePicker1").val().split(".").reverse().join("-");
 }
 else{
     console.log($( "#timeInterval" ).val());

   }
   timelines(dateFrom, dateTo);
  }).trigger("change");

function DoTimeIntervalWork(timeInterval){
 switch(timeInterval) {
  case "allTime":
    $(".datePickers").hide();
    timelines(0, 0);
    barCharts(0, 0);
    $( "#list" ).empty();
    mostArticles(0, 0);
    break;
  case "today":
    $(".datePickers").hide();
    timelines(date, tomorrow);
    barCharts(date, tomorrow);
    $( "#list" ).empty();
    mostArticles(date, tomorrow);
    break;
  case "yesterday":
    $(".datePickers").hide();
    timelines(yesterday, date);
    barCharts(yesterday, date);
    $( "#list" ).empty();
    mostArticles(yesterday, date);
    break;
  case "lastSevenDays":
    $(".datePickers").hide();
    timelines(sevenDaysAgo, date);
    barCharts(sevenDaysAgo, date);
    $( "#list" ).empty();
    mostArticles(sevenDaysAgo, date);
    break;
  case "lastThirtyDays":
    $(".datePickers").hide();
    timelines(thirtyDaysAgo, tomorrow);
    barCharts(thirtyDaysAgo, tomorrow);
    $( "#list" ).empty();
    mostArticles(thirtyDaysAgo, tomorrow);
    break;
  case "thisWeek":
    $(".datePickers").hide();
    timelines(thisWeekStart, tomorrow);
    barCharts(thisWeekStart, tomorrow);
    $( "#list" ).empty();
    mostArticles(thisWeekStart, tomorrow);
    break;
  case "lastWeek":
    $(".datePickers").hide();
    timelines(lastWeekStart, lastWeekEnd);
    barCharts(lastWeekStart, lastWeekEnd);
    $( "#list" ).empty();
    mostArticles(lastWeekStart, lastWeekEnd);
    break;
  case "thisMonth":
    $(".datePickers").hide();
    timelines(startOfMonth, date);
    barCharts(startOfMonth, date);
    $( "#list" ).empty();
    mostArticles(startOfMonth, date);
    break;
  case "lastMonth":
    $(".datePickers").hide();
    timelines(startOfLastMonth, endOfLastMonth);
    barCharts(startOfLastMonth, endOfLastMonth);
    $( "#list" ).empty();
    mostArticles(startOfLastMonth, endOfLastMonth);
    break;
  default:
    $(".datePickers").show();
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM