【问题标题】:Price discount by age function年龄函数价格折扣
【发布时间】:2013-06-08 19:52:32
【问题描述】:

我目前有一个任务,我必须创建一个用于订购东西的表单。例如一张报纸。我快完成了,但有几件事我真的想不通。

我有一个出生日期的下拉列表;它是按日、月和年设置的。当您未满 20 岁并订购时,我需要将总价格乘以 0.9(价格优惠 10%)。

到目前为止,这是我的代码(带有精简的下拉列表):

<select name="select1" onClick="TheFunction()" size="1">
    <option>- Date -</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>

 </select>

 <select name=”select2” onClick="TheFunction()" size="1">
    <option>- Month -</option>
    <option value="1">Januari</option>
    <option value="2">Februari</option>
    <option value="3">Mars</option>
    <option value="4">April</option>
    <option value="5">Maj</option>
    <option value="6">Juni</option>
    <option value="7">Juli</option>
    <option value="8">Augusti</option>
    <option value="9">September</option>
    <option value="10">Oktober</option>
    <option value="11">November</option>
    <option value="12">December</option>

 </select>

 <select name=”select3” onClick="TheFunction()" size="1">
    <option>- Year -</option>
    <option value="2011">2011</option>
    <option value="2010">2010</option>
    <option value="2009">2009</option>
    <option value="2008">2008</option>
    <option value="2007">2007</option>
    <option value="2006">2006</option>
</select>

我的想法是让“年份”成为“重要”的选项列表,例如如果你是1993年之前出生的,你将支付全价,但如果你出生在1993年之后,你将获得折扣。在这个列表中,我们可以说 2008,因为它被缩短了。

如果有任何方法可以提供确切的日期,那当然会更好。

这是脚本:

function TheFunction() {

    if (document.formular.select.select3.value >= 1993) {

        price = priceOne() + priceTwo() + priceThree()
        priceDiscount = (price)*(0.9);

    } else {

        price = priceOne() + priceTwo() + priceThree()
        priceDiscount = price;

    }

    document.formular.priset.value = priceDiscount

}

我已经从我的母语(瑞典语)翻译了它,我可能遗漏了一些东西。

所以这就是我认为的“方式”。但我正在寻找任何解决方案来解决这个问题,这不是初学者的路。

建议?

【问题讨论】:

    标签: javascript forms html-select equation


    【解决方案1】:

    使用下面的函数代替你的函数:

    function TheFunction()
    
            {
    
                 var d = new Date();
                 if (d.getFullYear()-document.formular.select.select3.value >= 20){
    
                  price = priceOne() + priceTwo() + priceThree()
                  priceDiscount = (price)*(0.9);
    
                  }
    
                 else{
                        price = priceOne() + priceTwo() + priceThree()
                priceDiscount = price;
    
                  }
    
                  document.formular.priset.value = priceDiscount
    
                    }
    

    【讨论】:

      【解决方案2】:

      表单控件的值是文本,所以你应该先将它们转换为数字:

      var yr = parseInt(document.formular.select.select3.value, 10);
      

      但我怀疑您应该删除“选择”一词。我还没有测试过,但这不会 AFAIK 引用所有“选择”元素。

      【讨论】:

      • 我也想过这个问题,但我不确定是否要这样做,但是在我尝试之前我需要一个工作功能。双重选择,我的意思是。但你指的是现在的月份?
      • 我可以补充一点,“select.select3”不起作用,“select3”就足够了。谢谢。
      【解决方案3】:

      最好提供您选择的 id;这些可以与他们的名字相同。

      var yr = document.getElementById('select3').value; // then 
      yr = parseInt(yr, 10); 
      

      转换为数字。对 3 个选择中的每一个执行此操作,然后您可以将这三个数字转换为日期值:

      var dob = new Date(yr, mth, dy);
      

      然后执行您需要的计算。

      Mozilla - Date

      【讨论】:

      • 通过这样做,它基本上与 TechByte 建议的脚本相同,只是我“获取”了所有列表和更准确的计算? parseint,对所有人来说都是一样的吗? (我不得不承认我对它不太熟悉)。
      • 是的,计算更准确。获取所有三个部分,使用 parseInt() 将它们转换为数字,然后从它们创建一个 Date 实例。然后你可以使用 Date 方法来计算他们的年龄。请参阅我提供的 Mozilla 链接;日期方法在下面列出。
      • 我并没有真正让它工作。一旦我输入“(yr,mth,dy)”,而不是让它空着,它就开始麻烦了。例如。它仅按年起作用,但是当我试图进入其他人时,它要么在我输入任何值时立即计数它们,要么文学什么都没有发生。那我就照你说的做了,使用了TechByte提供的脚本。
      • 月份数也需要减 1,因为 JS 月份从 Jan==0 开始。没关系。祝你好运。
      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2020-09-16
      • 2020-05-05
      相关资源
      最近更新 更多