【问题标题】:Get data attribute onchange event获取数据属性 onchange 事件
【发布时间】:2020-03-30 17:45:58
【问题描述】:

我正在尝试检索我添加到选项元素的自定义数据属性,但它不起作用。

<p>Select a new car from the list.</p>

<select id="mySelect" onchange="myFunction(this.data-price)">
  <option data-price="250" value="Audi">Audi</option>
  <option data-price="130" value="BMW">BMW</option>
  <option data-price="120" value="Mercedes">Mercedes</option>
  <option data-price="400" value="Volvo">Volvo</option>
</select>

<p>When you select a new car, a function is triggered which outputs the value of the selected car.</p>
<p id="demo"></p>
function myFunction(val) {
  document.getElementById("demo").innerHTML = "You selected: " + val;
  console.log(val);
}

问题是当我将函数调用切换到:

onchange="myFunction(this.value)">

它会正确返回值,但是当我选择数据价格时,它会将undefined 返回到控制台。

【问题讨论】:

  • 那不正确....this.data-price 说的是this.data minus price,这不是您读取数据属性的方式
  • @coderHelper 我试过它返回完整的选择元素!
  • @epascarello 那我该怎么办?

标签: javascript jquery html dom-events


【解决方案1】:

您的代码说“获取数据属性”并从中减去变量“价格”。第二个问题,当它位于选项上时,您正在选择该选项上的属性。你不能把它当作价值来使用。

您应该在所选选项上使用dataset

function myFunction(sel) {
  var opt = sel.options[sel.selectedIndex];
  var price = opt.dataset.price
  document.getElementById("demo").innerHTML = "You selected: " + price;
}
<p>Select a new car from the list.</p>

<select id="mySelect" onchange="myFunction(this)">
  <option data-price="250" value="Audi">Audi</option>
  <option data-price="130" value="BMW">BMW</option>
  <option data-price="120" value="Mercedes">Mercedes</option>
  <option data-price="400" value="Volvo">Volvo</option>
</select>

<p>When you select a new car, a function is triggered which outputs the value of the selected car.</p>
<p id="demo"></p>

【讨论】:

    【解决方案2】:

    只需访问所选选项的数据属性(jQuery 示例,因为您已标记它):

    $("#mySelect").change(function() {
      const $this = $(this); // Cache $(this)
      const dataVal = $this.find(':selected').data('price'); // Get data value
      const selectedVal = $this[0].value;
      alert(`${dataVal}, ${selectedVal}`);
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <p>Select a new car from the list.</p>
    
    <select id="mySelect">
      <option data-price="250" value="Audi">Audi</option>
      <option data-price="130" value="BMW">BMW</option>
      <option data-price="120" value="Mercedes">Mercedes</option>
      <option data-price="400" value="Volvo">Volvo</option>
    </select>
    
    <p>When you select a new car, a function is triggered which outputs the value of the selected car.</p>
    <p id="demo"></p>

    【讨论】:

    • @coderHelper 它会产生错误,因为您内联了 js 函数调用(永远不要这样做)。我已将其删除,它不再产生错误。
    • 问题是我不想用 jquery 尝试这个,因为我有一个表单转发器,这个只会选择第一个表单。添加的不会触发任何事件。它仅适用于第一个元素(我从中获得重复的元素)
    • @ZakariaSichaib,那你为什么要标记 jQuery?此外,这将与您的表单转发器完美地工作。只需将选择器更改为类选择器:$(".myCustomClassSelectorForAllDropDowns").change(function() { ... }。你不需要内联你的 JS 来工作。
    猜你喜欢
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2018-12-09
    相关资源
    最近更新 更多