我试图使div在输入包含至少1个字符时出现,并在输入为空时将其隐藏。但是,无论做什么,我都无法正常工作。

这是我的第一次尝试:

var input = document.getElementById('search');
    input.addEventListener('keypress', function(e) {

        var searchHits = document.getElementById('search-hits');

        if (e.keyCode >= 48 && e.keyCode <= 90) {
            searchHits.style.display = 'block';
        }
        else if (e.keyCode === 8 && input.value === '') {
            searchHits.style.display = 'none';
        }
    });


这是行不通的,因为退格(keyCode 8)按键实际上并未算作按键,因为它不会在输入值中添加字符。

因此,我认为此解决方案应该有效:

var input = document.getElementById('search');
    input.addEventListener('keypress', function(e) {

        var searchHits = document.getElementById('search-hits');

        if (input.value.length >= 0) {
            searchHits.style.display = 'block';
        }
        else {
            searchHits.style.display = 'none';
        }
    });


但是我又遇到了同样的问题,因为退格没有被注册为实际的按键。.我不知道如何解决这个问题,以使其正常工作。有任何想法吗?

编辑:我也尝试过将'keypress'更改为keydown,keyup,input和change。他们都不工作。

最佳答案

var input = document.getElementById('search');
    input.addEventListener('keyup', function(e) {

        var searchHits = document.getElementById('search-hits');

        if (input.value.length > 0) {
            searchHits.style.display = 'block';
        }
        if (input.value.length == 0) {
            searchHits.style.display = 'none';
        }
    });

  <input type="text" id="search">

  <div id="search-hits" style="display:none;">
    <li>item 1</li>
    <li>item 2</li>
  </div>





一些发现:


如果没有更复杂的代码,'keydown'事件将无法工作,因为在keydown上,当输入为空时,值长度仍为1。而keyup会将其检测为0。
不知道为什么,但是将逻辑放到两个if块中,而不是一个if / else,才可以使它起作用。

关于javascript - 如何使div在input.value> 0时显示并在其为0时隐藏它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26767008/

10-12 00:49