Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动计算表单的价格jquery/javascript函数_Javascript_Jquery_Html - Fatal编程技术网

自动计算表单的价格jquery/javascript函数

自动计算表单的价格jquery/javascript函数,javascript,jquery,html,Javascript,Jquery,Html,所以基本上我需要添加到这个表单中-自动计算价格。例如,参数如下(3辆自行车只是测试,可能有100辆甚至200辆)。 所以基本上- Bike 1 - Price for 1 - 2 days in Season 1 - 5$ per day. Price for 1 - 2 days in Season 2 - 10$ per day. Price for 1 - 2 days in Season 3 - 20$ per day. Price for 3 - 7 days in Season 1

所以基本上我需要添加到这个表单中-自动计算价格。例如,参数如下(3辆自行车只是测试,可能有100辆甚至200辆)。 所以基本上-

Bike 1 -
Price for 1 - 2 days in Season 1 - 5$ per day.
Price for 1 - 2 days in Season 2 - 10$ per day.
Price for 1 - 2 days in Season 3 - 20$ per day.
Price for 3 - 7 days in Season 1 - 4$ per day.
Price for 3 - 7 days in Season 2 - 7$ per day.
Price for 3 - 7 days in Season 3 - 15$ per day.
Price for 8+ days in Season 1 - 3$ per day.
Price for 8+ days in Season 2 - 5$ per day.
Price for 8+ days in Season 3 - 12$ per day.

Bike 2 -
Price for 1 - 2 days in Season 1 - 10$ per day.
Price for 1 - 2 days in Season 2 - 20$ per day.
Price for 1 - 2 days in Season 3 - 30$ per day.
Price for 3 - 7 days in Season 1 - 7$ per day.
Price for 3 - 7 days in Season 2 - 15$ per day.
Price for 3 - 7 days in Season 3 - 25$ per day.
Price for 8+ days in Season 1 - 5$ per day.
Price for 8+ days in Season 2 - 12$ per day.
Price for 8+ days in Season 3 - 22$ per day.

Bike 3 -
Price for 1 - 2 days in Season 1 - 3$ per day.
Price for 1 - 2 days in Season 2 - 5$ per day.
Price for 1 - 2 days in Season 3 - 10$ per day.
Price for 3 - 7 days in Season 1 - 2$ per day.
Price for 3 - 7 days in Season 2 - 3$ per day.
Price for 3 - 7 days in Season 3 - 7$ per day.
Price for 8+ days in Season 1 - 1$ per day.
Price for 8+ days in Season 2 - 2$ per day.
Price for 8+ days in Season 3 - 5$ per day.
季节日期如下:

Season 1: 1 January to 10 June and 21 September to 31 December
Season 2: 11 June to 30 June and 1 September to 20 September
Season 3: 1 July to 31 August
让我们做一个测试计算。 如果我选择从7月1日到9月25日的日期,则自行车3的计算如下-

62*5+20*2+5*1=310+40+5=355$

该金额应自动添加到文本字段“价格”中。如果我更改日期,价格也会自动更改。有没有简单的方法来创造这样的东西?如果您有任何问题,请提问,我很乐意回答,这样您可以帮助我更轻松地解决此问题。

现场示例:

我从两个变量开始,它们代表

  • 一系列不同的季节
  • 表示定价矩阵的对象


第一个很简单。第二个我只是修改了bike3,因为它是您在示例中使用的<代码>1,
2
3
表示季节,
t1
-
t3
表示付款级别,其中
t1
硬编码为1-2天,
t2
为3-7天,
t3
为8+

然后我创建了两个函数。可以获取指定日期的季节:

function getSeason(date){
    var day = date.getDate();
    var month = date.getMonth()+1;
    var year = date.getFullYear();
    for(var i=0;i<seasonLookup.length;i++){
        var s = seasonLookup[i];
        var startDate = new Date(year, s.startMonth-1,s.startDay);
        var endDate = new Date(year, s.endMonth-1,s.endDay);
        if(date >= startDate && date <= endDate)
            return s.season;
    }
    return null;
}
希望这有所帮助,您可能需要从PHP生成定价矩阵,但这是一个练习:)

实时示例:

我从两个变量开始,它们代表

  • 一系列不同的季节
  • 表示定价矩阵的对象


第一个很简单。第二个我只是修改了bike3,因为它是您在示例中使用的<代码>1,
2
3
表示季节,
t1
-
t3
表示付款级别,其中
t1
硬编码为1-2天,
t2
为3-7天,
t3
为8+

然后我创建了两个函数。可以获取指定日期的季节:

function getSeason(date){
    var day = date.getDate();
    var month = date.getMonth()+1;
    var year = date.getFullYear();
    for(var i=0;i<seasonLookup.length;i++){
        var s = seasonLookup[i];
        var startDate = new Date(year, s.startMonth-1,s.startDay);
        var endDate = new Date(year, s.endMonth-1,s.endDay);
        if(date >= startDate && date <= endDate)
            return s.season;
    }
    return null;
}


希望这能有所帮助,您可能需要从PHP生成定价矩阵,但这是一个练习:)

EDIT:我有一个硬编码版本,但它工作不太好,大约有2000行代码,所以我想让它更简短,让以后使用它的其他程序员更舒服。哦,价格将通过PHP传递。如果你用PHP计算正确的价格,你只需要使用Ajax调用并将其注入输入价格。您正在寻找Jquery ajax调用的示例吗?我很懒,真的不愿意一直上下滚动来阅读问题的相关部分,所以你能解释一下你示例计算中的数字来自哪里吗?你是说62*5+20*2+5*1=310+40+5=355$?它来自《自行车3》和《季节表》/Description.EDIT:我有一个硬编码的版本,但它工作不太好,大约有2000行代码,所以我想让它更简短,让以后使用它的其他程序员更舒服。哦,价格将通过PHP传递。如果你用PHP计算正确的价格,你只需要使用Ajax调用并将其注入输入价格。您正在寻找Jquery ajax调用的示例吗?我很懒,真的不愿意一直上下滚动来阅读问题的相关部分,所以你能解释一下你示例计算中的数字来自哪里吗?你是说62*5+20*2+5*1=310+40+5=355$?它来自自行车3和季节表/描述。你好,好的,谢谢。我会检查它并尝试从我这边添加一些东西。所以,基本上,我检查的是,你已经通过数组传递了价格,但我已经通过PHP传递了价格,所以关于这一点的任何建议(如果我有200多辆自行车),我希望它们能够自动地以友好的方式添加,而不是在文件中写入每个tiem。关于第一个函数,据我所知,它采用当前日期,但我的意思是,它必须采用表单字段“from”中的日期。没什么大不了的,很容易改变。我也会想办法的。再次感谢!好的,我理解你关于第一个函数的想法。但现在的问题是,如果我通过PHP传递价格,我如何轻松地将它们添加到javascript数组PriceMatrix中?你有什么建议吗?嗯,没有。你理解有点错误:)!如果总天数小于7天且大于2天,则取价格,但如果总天数大于8天,则所有天数取一个价格(8+价格)。所以,基本上,如果我们必须在第1天或第2天,它将采取的价格为1-2天的价格,如果它将是>2和哇,谢谢!也许你能给我一些提示,把PHP的价格传递给计算吗?我有一个想法,把它们从javascript中取出来,比如priceone=“2”pricetwo=“3”。。。pricenine=“9”e.c.,然后将其输入数组。这样行吗?我会把价格加在自行车选择的每个选项上。价格很简单。。。将它们放在一个表中,在php中创建完全相同的数组结构,并将json_编码到页面作为js变量,或者执行ajax调用以获取基于季节、天数和自行车类型的价格Hello,好的,谢谢,我会检查它并尝试从我这边添加一些内容。所以,基本上,我检查的是,你已经通过数组传递了价格,但我已经通过PHP传递了价格,所以关于这一点的任何建议(如果我有200多辆自行车),我希望它们能够自动地以友好的方式添加,而不是在文件中写入每个tiem。关于第一个函数,据我所知,它采用当前日期,但我的意思是,它必须采用表单字段“from”中的日期。没什么大不了的,很容易改变。我也会想办法的。再次感谢!好的,我理解你关于第一个函数的想法。但现在的问题是我是否通过了价格
function getPrice(bike, season, days){
  var tier = "";
  if(days <=2)
    tier = "t1";
  else if(days <=7)    
      tier = "t2";
   else
       tier = "t3"
   return priceMatrix[bike][season][tier] * days;
}
function calculatePrice(startDate, endDate, bike)
{
   var currentSeason = getSeason(startDate);
   var totalPrice = 0;
   var daysInSeason = 0;
   var currentDate = startDate;
   while(currentDate<=endDate){
       var season = getSeason(currentDate);
       if(season != currentSeason){
              totalPrice += getPrice(bike,currentSeason,daysInSeason);
              currentSeason = season;
              daysInSeason = 0;
       }
       daysInSeason++;
       currentDate.setDate(currentDate.getDate()+1);        
   }
    totalPrice += getPrice(bike,currentSeason,daysInSeason);
    return totalPrice;
}
$('.recalc').change(function(){
    var startDate = new Date(parseInt($('#yd').val(),10),parseInt($('#md').val(),10)-1,parseInt($('#dd').val(),10) );
    var endDate = new Date(parseInt($('#yr').val(),10),parseInt($('#mr').val(),10)-1,parseInt($('#dr').val(),10));
    var bike = $('#bike').val();

    var price = calculatePrice(startDate,endDate,bike);
    $('#price').val(price);

});