Using event.which to verify if the user pressed the spacebar doesn't work in Firefox

后端 未结 4 572
粉色の甜心
粉色の甜心 2021-01-06 07:59

I want a script to verify if the key pressed is \'spacebar\', keycode 32. I noticed that IE uses other function names.

I tried a lot of solutions found here and this

相关标签:
4条回答
  • 2021-01-06 08:09

    I've never had any problems with the following and I've used it in IE6 through IE9, Firefox 3.5-5 and Chrome from at least 9-13

    function captureSpace (evt) {
        var e = evt || event;
        var code = e.keyCode || e.which;
        if (code === 32) {
            // Do your thing...
        }
    }
    

    This uses a logical OR to basically say if evt is a falsy value then use the window.event

    var e = evt || event;
    

    This uses a logical OR to assign the code for the key pressed in the same way

    var code = e.keyCode || e.which;
    

    This gives you a true or false value if the code is exactly equal to the integer value of 32

    (code === 32)
    

    I also suggest that you assign this to the key UP event.

    0 讨论(0)
  • 2021-01-06 08:14

    EDIT

    HMTL:

    <textarea onkeydown="predicao(this);" cols="40" rows="10" id="test" onfocus="this.focus()"></textarea>
    <input id="example" style="display: none;" onkeydown="insert(this, event);"/>
    

    JS:

    function predicao(objeto){
        var comprimento = objeto.value.length;
        var antipenultimo = comprimento - 4;
        var input = objeto.value.substring(antipenultimo,comprimento);
        var output = "";
        for(var i=0; i<input.length; ++i){
            if(output != "") output += ", ";
            output += input.charCodeAt(i);
        }
        if (output == "91, 91, 103, 32"){
            var preditor = document.getElementById('example');
            preditor.value = '';
            preditor.style.display = 'block';
            preditor.focus();
            preditor.select();
        }
    }
    function insert(objeto, evt){
        var e = evt || event;
        var code = e.keyCode || e.which;
        if(code == '32') {
            var texto = document.getElementById('test').value;
            texto += objeto.value+']]';
            $('#test').focus();
            document.getElementById('test').value = texto;
            objeto.style.display = 'none';
        }
    }
    $(document).ready(function(){
        var data = "Ab Aco Ado Ala Mano Cata Ca Obo Olo Po Poq".split(" ");
    $("#example").autocomplete(data);});
    

    I used here what Alexander Kahoun and pimvdb have posted.

    0 讨论(0)
  • 2021-01-06 08:27

    In principle the way you do it should work. Check this out:

    <html>
    <head>
    <script type="text/javascript">
    function check(e){
     var keynum
     if(window.event)
     {
      keynum = e.keyCode
     }
     else if(e.which)
     {
      keynum = e.which
     }
     if(keynum=='32')
     {
      alert(keynum);}
      }
    </script>
    </head>
    <form>
    <input type="text" onkeypress="check(event)" />
    </form>
    </body>
    </html> 
    

    It seems that your lack of response is context dependent.

    0 讨论(0)
  • 2021-01-06 08:28

    To display unicode of key pressed

             <script type="text/javascript">
                    function displayunicode(e){
                                                var unicode=e.keyCode? e.keyCode : e.charCode;
                                                alert(unicode);
                                              }
            </script>
                    <form>
                          <input type="text" size="2" maxlength="1" onkeyup="displayunicode(event); this.select()" />
                    </form>
    

    Determining which key was pressed

    0 讨论(0)
提交回复
热议问题