检测用户是否在datalist中选择或键入新值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检测用户是否在datalist中选择或键入新值相关的知识,希望对你有一定的参考价值。

我坚持要检测用户是否选择或输入新值。

这里我有单独的datalist组件:

 //DataList component

  adresses=[
  {
    "id": 1,
    "address": "address 1",
  },
  {
    "id": 2,
    "address": "address 2",
  },
  {
    "id": 3,
    "address": "address 3",
  },
  {
    "id": 4,
    "address": "address 4",
  }
]


<input
  type="text"
  list="data-list"
  className={classname}
  onChange={onchange}
  placeholder={placeholder}
/>
<datalist id="data-list">
  {adresses.map((item, idx) => {
    const { id, address } = item
    return <option key={idx} data-value={id} value={address} />
})}
</datalist>

比我正在调用该组件并将道具传递给它:

<DataList
  classname="event_time-inputs datasets"
  onchange={e => this.onChooseAddress(e)}
  adresses={this.state.adresses}
  placeholder={"Type or select address"}
/>

OnChange功能:

 onChooseAddress(e) {
    console.log(e.target.value)
  }

如果用户从选项中选择,我需要以某种方式从选项中传递“数据值”。我有新的反应,请理解我的愚蠢问题。

答案

或者最终你可以尝试分配onKeyPress事件来跟踪你的datalist中的变化,并将事件分配给datalist来调用你的函数onChooseAddress(id)

另一答案

你可以使用onClick on Component。并将idx作为参数传递并稍后使用

return <option key={idx} data-value={id} value={address} onClick={() =>{this.onChooseAddress(idx)}} />

 onChooseAddress(i) {
   console.log(adresses[i].id)
   console.log(adresses[i].address)
  }

以上是关于检测用户是否在datalist中选择或键入新值的主要内容,如果未能解决你的问题,请参考以下文章

当用户键入时,Select2 下拉列表允许用户输入新值

是否有可能在 <datalist> 中禁用用户输入?

检测用户是不是进入或离开区域 - 地理编码

检测光标位于 Scintilla NET 中的注释或字符串上方

通过键入选择组合框中的项目

如何让突变观察者检测文本区域的值变化?