我认为这应该很简单,但看起来并非如此。
背景:我有一个ASP.NET MVC项目(.net版本4.6.1)。我在屏幕上有一个“类型”的选择。不同类型的费用不同(币种不同)。 (两种货币的选择必须相同。)
<select name="Type" class="form-control" id="Type" style="cursor: auto;" onchange="ChangeCharges()">
<option selected="selected" value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
</select>
<select name="Currency" class="form-control" id="Currency" style="width: auto; cursor: auto;" onchange="ChangeCharges()">
<option selected="selected" value="GBP">GBP</option>
<option value="USD">USD</option>
</select>
<input name="ServiceCharge" class="form-control text-box single-line" id="serviceCharge" type="text" value="20.00" data-val="true">
<select name="ContractorCurrency" class="form-control" id="ContractorCurrency" style="width: auto; cursor: auto;" onchange="ChangeCharges()">
<option selected="selected" value="GBP">GBP</option>
<option value="USD">USD</option>
</select>
<input name="ContractorCharge" class="form-control text-box single-line" id="contractorCharge" type="text" value="18.00" data-val="true">
如果更改了“类型”,则两种货币框将被设置为正确的选择,这两个文本框也会被设置为正确。 (如果A仅具有USD,则“ 20.00”作为服务费,“ 18.00”作为承包商费,两种货币框将设置为“ USD”,“服务费”文本框设置为20.00,“合同费用”文本框设置为18.00。)但是,用户可以自由选择A型的“ GBP”,并且所有费用都将设置为0.00。
function ChangeCharges() {
var allChargesInJson = @Html.Raw(Json.Encode(ViewData["allCharges"]));
var charges = $.parseJSON(allChargesInJson);
var typeIdSelected = $('#Type option:selected').val();
var typeSelectedText = $('#Type option:selected').text();
var CurrencySelected = $('#Currency option:selected').text(); // 'GBP' or 'USD'
var ContractorCurrencySelected = $('#ContractorCurrency option:selected').text();
var allCurrencies = @Html.Raw(ViewData["AllCurrencies"]);
console.log(allChargesInJson);
console.log("selected type: " + typeSelectedText);
var bFound = false;
for (var i = 0; i < charges.length; ++i) {
if (charges[i].Id.toString() == typeIdSelected) {
if (charges[i].searchCurrency == CurrencySelected) {
bFound = true;
$('#serviceCharge').val(charges[i].searchCharge.toFixed(2));
$('#contractorCharge').val(charges[i].contractorCharge.toFixed(2));
}
}
}
if (bFound == false) {
console.log("Finally not found: Set all to zero");
$('#serviceCharge').val('0.00');
$('#contractorCharge').text('0.00');
}
}
到目前为止,我的逻辑是正确的。只是一个问题。如果用户为ServiceCharge或ContractorCharge选择其他货币,我如何使其他货币的货币相同?
(因此它成为了如何在JavaScript中检测下拉菜单的先前值,但是三个下拉菜单共享相同的onchange()!)
(由于我有3个下拉菜单,我无法将此SO Answer设为“在更改之前获取选择(下拉菜单)的值”来为我工作)。