JavaScript:三个下拉菜单,一个onchange()。一个下拉菜单更改,另一个下拉菜单

时间:2019-11-14 09:55:38

标签: javascript jquery html

我认为这应该很简单,但看起来并非如此。

背景:我有一个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设为“在更改之前获取选择(下拉菜单)的值”来为我工作)。

0 个答案:

没有答案
相关问题