Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
Javascript 根据选项值匹配选择对象变量_Javascript_Variables_Object_Attributes_Option - Fatal编程技术网

Javascript 根据选项值匹配选择对象变量

Javascript 根据选项值匹配选择对象变量,javascript,variables,object,attributes,option,Javascript,Variables,Object,Attributes,Option,我是javaScript新手,几天前才开始学习,希望能在这方面得到一些帮助。无论如何,我很难找到一个方法或函数来实际进行相应的var检查,并将相应的选定值作为我的selectedCheck在计算中运行。我之所以将其设置为对象,是因为有几种类型的支票,每种都有不同的期权价值、数量和价格 无论如何,这是我目前的代码: <select class="priceDrp5"> <option value="1785-00050/check-11">50</option>

我是javaScript新手,几天前才开始学习,希望能在这方面得到一些帮助。无论如何,我很难找到一个方法或函数来实际进行相应的var检查,并将相应的选定值作为我的selectedCheck在计算中运行。我之所以将其设置为对象,是因为有几种类型的支票,每种都有不同的期权价值、数量和价格

无论如何,这是我目前的代码:

<select class="priceDrp5">
<option value="1785-00050/check-11">50</option>
<option selected="true" value="1785-00250/check-11">250</option>
<option value="1785-00500/check-11">500</option> 
<option value="1785-001000/check-11">1000</option>
<option value="1785-002000/check-11">2000</option>
</select>

<script>
function selectedCheck(current_quantity, current_price, projected_quantity, projected_price, optionValue) {
this.current_quantity = current_quantity;
this.current_price = current_price; 
this.projected_quantity = projected_quantity;
this.projected_price = projected_price;
this.optionValue = function getValueFromOption() {
var x = document.getElementsByTagName("option").each().getAttribute("value");
if (x === this.optionValue) { 

     /* Make the matching var check the selectedCheck */

    }
  };
}

/*Secure Plus Voucher Checks*/
var check_11_50 = new selectedCheck(50, 66.99, 250, 169.99, "1785-00050/check-11");
var check_11_250 = new selectedCheck(250, 169.99, 500, 230.99, "1785-00250/check-11");
var check_11_500 = new selectedCheck(500, 230.99, 1000, 327.99, "1785-00500/check-11");
var check_11_1000 = new selectedCheck(1000, 327.99, 2000, 514.99, "1785-01000/check-11");


/*Calculations*/
var current_pricepercheck = (selectedCheck.current_price - selectedCheck.current_quantity).toFixed(2);
var projected_pricepercheck = (selectedCheck.projected_price - selectedCheck.projected_quantity).toFixed(2);
var current_price_bulk = (selectedCheck.current_price / selectedCheck.current_quantity * selectedCheck.projected_quantity).toFixed(2);
var projected_price_bulk = (selectedCheck.projected_price / selectedCheck.projected_quantity * selectedCheck.projected_quantity ).toFixed(2); 
var savings = ( selectedCheck.current_price_bulk - selectedCheck.projected_price_bulk).toFixed(2);   
document.getElementById("savings").innerHTML = (savings.toFixed(2));
</script>

另外,如果我想绕圈子,请让我知道。我总是乐于听到捷径。提前感谢。

与其稍后使用检查对象值进行计算,为什么不在实例化对象值时进行计算呢。这当然可以进一步优化,但它是有效的!!顺便说一句,正如您所看到的,我最终没有使用jquery

js fiddle per平常的表现很不稳定,所以我写了一篇文章


你能把它放在JSFIDLE或codepen中让它更容易回答吗?对不起,我注意到我附加的HTML中有一些东西我没有更新,我无法编辑我的原始评论:你反对使用jquery吗?不,jquery应该很好,你正在硬编码这些值,它们不是由服务器调用返回的,可能会更改,是吗?我后来不得不进行计算的原因是,我的消息基本上是从一个已经存在的站点读取选择,然后将这些数字计算到跨度中。我无法访问当前选项选择。我似乎没有从上面的变量中得到任何值,也许我遗漏了什么?哦,看,这就是我所说的硬编码。你是如何访问变量的?你指的是哪些变量?还有,如果读取的是值,从哪里读取,代码是什么样子的?如果你检查我包含的代码笔并查看控制台,你应该会在那里看到所有检查的属性。哦,好的,我一定误解了硬编码的问题,抱歉@Todd。我尝试通过以下方式访问选项值:var x=document.getElementsByTagNameoption.getAttributevalue;如果x==this.optionValue{但是,这似乎也不起作用..我会继续玩我在之前的评论中提到的值是对象键值:pricePerCheck、priceBulk等。我看到节省是可行的,但我似乎无法从其他值中获得任何数值。
var checks = {};
function selectedCheck(quantity, price, projectedQuantity, projectedPrice, itemNumber) {
  var check = {
    pricePerCheck: (price - quantity).toFixed(2),
    projectedPricePerCheck: (projectedPrice - projectedQuantity).toFixed(2),
    priceBulk: (price / quantity * projectedQuantity).toFixed(2),
    projectedPriceBulk: (projectedPrice / projectedQuantity * projectedQuantity).toFixed(2),
    getSavings: function() { return (this.priceBulk - this.projectedPriceBulk).toFixed(2) } 
  };

  checks[itemNumber] = check;
}

selectedCheck(50, 66.99, 250, 169.99, "1785-00050/check-11");
selectedCheck(250, 169.99, 500, 230.99, "1785-00250/check-11");
selectedCheck(500, 230.99, 1000, 327.99, "1785-00500/check-11");
selectedCheck(1000, 327.99, 2000, 514.99, "1785-01000/check-11");

document.addEventListener('DOMContentLoaded', function() {
  var priceDrpSelect = document.querySelector('.priceDrp5'),
      savings = document.getElementById("savings"),
      selectedCheck;
  console.log(JSON.stringify(checks, null, 4))
  priceDrpSelect.addEventListener('change', function(e) {
    var key = this.options[this.selectedIndex].getAttribute('value');
    selectedCheck = checks[key];
    savings.innerHTML = selectedCheck.getSavings();
  });
  priceDrpSelect.dispatchEvent(new Event('change'));
});