打开选项时如何清除数据列表输入?

How to clear datalist input when options are opened?

我有一个 html5 输入和关联的数据列表,我想在打开选项时清除输入,以便所有这些都可见(未过滤)。我怎么能在 Javascript 中做到这一点? (有无jQuery)

例如()

<input type="text" name="city" list="cityname">
<datalist id="cityname">
  <option value="Boston">
  <option value="Cambridge">
</datalist>

当我单击下拉箭头时,然后 select 波士顿,然后再次单击下拉箭头 - 在第二次单击后我希望输入为空(因为它将选项过滤为一个选项输入 - 波士顿),所以我需要某种事件或允许我清空输入的东西,但它不能是 input 事件,因为当您单击下拉菜单时还没有输入任何内容。

您可以使用可编辑的下拉菜单,它将用作数据列表,您的要求将得到满足。下面给出了可编辑下拉列表的代码。

$(document).ready(function(){
   
    $(".editableBox").change(function(){         
        $(".timeTextBox").val($(".editableBox option:selected").html());
    });
});
.editableBox {
    width: 75px;
    height: 30px;
}

.timeTextBox {
    width: 54px;
    margin-left: -78px;
    height: 25px;
    border: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
    <select class="editableBox">        
        <option value="1">01:00</option>
        <option value="2">02:00</option>
        <option value="3">03:00</option>
        <option value="4">04:00</option>
        <option value="5">05:00</option>
        <option value="6">06:00</option>
        <option value="7">07:00</option>
        <option value="8">08:00</option>
        <option value="9">09:00</option>
        <option value="10">10:00</option>
        <option value="11">11:00</option>
        <option value="12">12:00</option>
        <option value="13">13:00</option>
        <option value="14">14:00</option>
        <option value="15">15:00</option>
        <option value="16">16:00</option>
        <option value="17">17:00</option>
        <option value="18">18:00</option>
        <option value="19">19:00</option>
        <option value="20">20:00</option>
        <option value="21">21:00</option>
        <option value="22">22:00</option>
        <option value="23">23:00</option>
        <option value="24">24:00</option>
    </select>
    <input class="timeTextBox" name="timebox" maxlength="5"/>
</div>

我所做的只是通过双击清除输入。这样至少用户可以选择,如果被告知 - 使用起来很舒服(对于新用户来说,它可能不是一个解决方案)。

这是我使用的代码:

# datalist does not fire change event, therefore we need this exception, the if is for avoiding duplicate call with keyup
$(@dom.search_fields).find('input.datalist_filter').on 'input', (e) =>
  @handleInput(e) if e.target.value.length and
                    ($(e.target.list).find('option').filter -> this.value == e.target.value).length

# it does not fire event if you set the value of input manually, therefore we need to call handleInput directly here
$(@dom.search_fields).find('input.datalist_filter').on 'dblclick', (e) =>
  e.target.value = ''
  @handleInput(e)