代码之家  ›  专栏  ›  技术社区  ›  Glyn

当我更改选项时,如何从表中动态创建的select中获取data-*属性的值

  •  0
  • Glyn  · 技术社区  · 4 年前

    我想在更改选项时从表中动态创建的select中获取data-*属性的值。我得到一个“未捕获的引用错误:索引未定义”。

    创建HTML的步骤是:

    html += "<td style='width : 1%; white-space: nowrap;'><select name='parRating'>"
    for (let i = 0; i <= paraArray; i++) {
        html += "<option name='parRatingOption' data-index='" + i + "' value='" + parIdArray[i] + "'>" + parRatingArray[i] + "</option>"
    };
    html += "</select></td>";
    

    选项change catch为:

    $('#showPatientPARForm').on( 'change', 'select[name="parRating"]', function (e) {
        e.preventDefault();
        alert("this.value: " + this.value);//works
        alert("this.data-index: " + this.data-index);//Uncaught ReferenceError: index is not defined
    });
    

    我也尝试过:

    警报(“this.attr('data-index”):“+$(this)。属性(“数据索引”)//未定义

    0 回复  |  直到 4 年前
        1
  •  1
  •   prettyInPink    4 年前

    您需要确保针对 data-attribute 正确地 选项的值从父选择器返回( select ),但选项本身需要以不同的方式访问。 使用 dataset 以数据属性为目标。

    let paraArray = ['one','two','three'];
    let parIdArray = ['idOne','idTwo','idThree'];
    let parRatingArray = [1,2,3];
    
    let html = '';
    html += "<td><select name='parRating'>";
    for (let i = 0; i < paraArray.length; i++) {
        html += "<option name='parRatingOption' data-index='" + i + "' value='" + parIdArray[i] + "'>" + parRatingArray[i] + "</option>";
    }
    
    html += "</select></td>";
    
    $('#showPatientPARForm table').append(html);
    
    $('#showPatientPARForm').on( 'change', 'select[name="parRating"]', function (e) {
        e.preventDefault();
       
        alert("this.value: " + this.value);//works
        
        // select the data attribute correctly:
        //alert(this.options[this.options.selectedIndex].dataset.index);
        alert(this.options.selectedIndex)
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div id="showPatientPARForm">
      <table></table>
    </div>