微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一些带有隐藏值的数据列表标签

如何解决一些带有隐藏值的数据列表标签

在这里找到了那个代码

<form action="<?PHP echo $adresstrust; ?>" method="post" >
    <input list="suggestionList" id="answerInput">
<datalist id="suggestionList">
    <option data-value="42">The answer</option>
    <option data-value="43">The answer3</option>
    <option data-value="44">The answer4</option>
</datalist>

<input list="suggestionList2" id="answer2Input">
<datalist id="suggestionList2">
    <option data-value="42">The answer</option>
    <option data-value="43">The answer3</option>
    <option data-value="44">The answer4</option>
</datalist>
<input type="hidden" name="answer" id="answerInput-hidden">
<input type="hidden" name="answer2" id="answer2Input-hidden">
<input type="hidden" name="ala" value="tutaj">
<input type="submit" name="" value="Start">
</form>
<script type="text/javascript">
    document.querySelector('input[list]').addEventListener('input',function(e) {
    var input = e.target,list = input.getAttribute('list'),options = document.querySelectorAll('#' + list + ' option'),hiddenInput = document.getElementById(input.getAttribute('id') + '-hidden'),inputValue = input.value;

    hiddenInput.value = inputValue;

    for(var i = 0; i < options.length; i++) {
        var option = options[i];

        if(option.innerText === inputValue) {
            hiddenInput.value = option.getAttribute('data-value');
            break;
        }
    }
});
</script>

效果很好。但是当我添加第二个数据列表代码时,只向我发送第一个数据列表中的值。如何使它从几个数据列表中向我发送值?

解决方法

要实现目标,您需要将事件处理程序分配给您希望包含此功能的所有合适的 input 元素。使用 querySelectorAll 获取此类节点列表并迭代以分配您的 input 事件处理程序。

为了简洁和方便,我简化了 ID/数据 ID。 Dataset 属性可以重复,因此在多个元素上使用 data-id=x 是可以接受的,而在多个元素上使用 id=x 是不合法的。这有助于稍后选择隐藏元素并意味着更简单的 HTML 代码。

整个 inputhandler 函数中的注释应该有助于阐明每个点发生的情况。

document.addEventListener('DOMContentLoaded',(e)=>{

  const inputhandler=function(e){
    // Find the appropriate datalist associated with current text input element.
    let list=document.querySelector( 'datalist#' + this.getAttribute('list') );
    // Find all the options within this datalist.
    let options=list.querySelectorAll('option');
    // Find the appropriate hidden input field based upon list attribute from current text input element.
    let input=document.querySelector('input[type="hidden"][ data-list="'+this.getAttribute('list')+'" ]');

    // Set the value of the hidden input to that of text element.
    input.value=this.value;

    // Iterate through `some` of the options - stop when a condition is met.
    Array.from( options ).some( opt=>{
      if( opt.textContent.trim()===this.value.trim() ){
        // condition has been satisfied - set hidden input element value
        input.value=opt.dataset.value;

        // display formatted message in the console
        console.log(
          'The hidden field "%s" has been assigned "%s" as it\'s new value',input.name,input.value
        );

        // stop iteration of nodelist - job done.
        return true;
      }
    })
  };

  document.querySelectorAll( 'input[list]' ).forEach( input=>input.addEventListener('input',inputhandler));
})
<form method='post' action="<?php echo $adresstrust; ?>">
  <input type='text' list='list1' />
  <datalist id='list1'>
    <option data-value='42'>The answer
    <option data-value='43'>The answer3
    <option data-value='44'>The answer4
  </datalist>

  <input type='text' list='list2' />
  <datalist id='list2'>
    <option data-value='42'>The answer
    <option data-value='43'>The answer3
    <option data-value='44'>The answer4
  </datalist>

  <input type='hidden' name='answer' data-list='list1' />
  <input type='hidden' name='answer2' data-list='list2' />

  <input type='hidden' name='ala' value='tutaj' />
  <input type='submit' value='Start' />
</form>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?