使用 Id 在 Datalist 中设置选定值

Set selected value in Datalist using Id

我知道如何使用值在 Datalist 中设置选定值,

("#taxCodeID").val("value");

但是我不能用这个方法,我想用ID设置选中的值。

在我的例子中,我有两个数据列表 TaxCode 和 TaxName。

<div class="form-group">
    <label for="validate-text">Tax Code</label>
    <div class="input-group">
        <input type="text" name="TaxCode" list="taxCode" id="taxCodeID"
                       class="form-control ddlCustomercategoryClass" placeholder="--Select Tax Code--" />
        <datalist id="taxCode">
            <option value="---Select Tax Code---"></option>
            <option value="T01" id="1"></option>
            <option value="T02" id="2"></option>
            <option value="T03" id="3"></option>
            <option value="T04" id="4"></option>
        </datalist>
    </div>
</div>



<div class="form-group">
    <label for="validate-text">Tax Name</label>
    <div class="input-group">
        <input type="text" name="TaxName" list="taxName" id="taxNameID"
                       class="form-control ddlCustomercategoryClass" placeholder="--Select Tax Name--" />
        <datalist id="taxName">
            <option value="---Select Tax Name---"></option>
            <option value="Tax 01" id="1"></option>
            <option value="Tax 02" id="2"></option>
            <option value="Tax 03" id="3"></option>
            <option value="Tax 04" id="4"></option>
        </datalist>
    </div>
</div>

这里的值来自保存 table,id 字段相同但值字段不同。

我正在尝试在 TaxCode 更改时设置 TaxNAme 的值。我不能使用该值来设置其他我需要使用的 Id。

我该怎么做?

$("#taxCodeID").on('change', function () {

    var taxid = $("#taxCodeID").val(); // getting tax value here

    $("#taxNameID").val(taxid); // setting wrong info

})

Fiddle 以上:Fiddle

在 TaxCode 中选择 T01 应该在 TaxName 中设置 Tax 01 但其设置为 T01

试试这个片段:
Fiddle: https://jsfiddle.net/zL0oqt4f/

$("#taxCodeID").on('change', function () {
    var taxid = $("#taxCodeID").val();
    var id;

    $('#taxCode > option').each(function(){
        if($(this).attr("value") == taxid ){
           id = $(this).attr("id");
        }
    }); //iterate through the taxCode options searching for the taxid

    var value = $('#taxName > #' + id).attr("value"); //based on the id, select from datalist
    $("#taxNameID").val(value); 
})

首先,我通过在您的第二个数据列表中添加 ID 前缀解决了您重复的 ID 问题。然后它变得非常容易。此外,您根本不需要 jQuery。

taxCodeID.addEventListener('input', (e) => {
  if (e.target.value) {
    // get the id of the picked item in the first datalist
    const taxCodePickedId = document.querySelector(`option[value=${e.target.value}]`) ? document.querySelector(`option[value=${e.target.value}]`).id : '';
    // use that id to retrieve the second datalist's matching option
    const taxNameMatch= document.getElementById(`tn${taxCodePickedId}`);
    // make sure there is a matching element in the second list
    if (taxNameMatch) {
      taxNameID.value = taxNameMatch.getAttribute('value');
    }
  }
})
<div class="form-group">
    <label for="validate-text">Tax Code</label>
    <div class="input-group">
        <input type="text" name="TaxCode" list="taxCode" id="taxCodeID"
                       class="form-control ddlCustomercategoryClass" placeholder="--Select Tax Code--" />
        <datalist id="taxCode">
            <option value="---Select Tax Code---"></option>
            <option value="T01" id="1"></option>
            <option value="T02" id="2"></option>
            <option value="T03" id="3"></option>
            <option value="T04" id="4"></option>
        </datalist>
    </div>
</div>



<div class="form-group">
    <label for="validate-text">Tax Name</label>
    <div class="input-group">
        <input type="text" name="TaxName" list="taxName" id="taxNameID"
                       class="form-control ddlCustomercategoryClass" placeholder="--Select Tax Name--" />
        <datalist id="taxName">
            <option value="---Select Tax Name---"></option>
            <option value="Tax 01" id="tn1"></option>
            <option value="Tax 02" id="tn2"></option>
            <option value="Tax 03" id="tn3"></option>
            <option value="Tax 04" id="tn4"></option>
        </datalist>
    </div>
</div>