jQuery:需要防止重复的“空格键”输入

时间:2015-03-09 16:39:32

标签: jquery forms input keycode

道歉,如果这是一个简单的问题,相对较新的JavaScript / jQuery编码器。我想要做的是在输入字段(邮政编码条目)上进行验证,用户在空格键无法再次按下后按空格键。

我理解如何防止任何输入条目中的空格键,但在最多按一次后无法掌握如何操作。


编辑: @ cosmo0这是我开始尝试类似于@hamed但使用我在其他网站上看到的内容:

var spacePress = 0;
$('#StreamUrl').keypress(function(event){     
    var keycode = (event.keyCode ? event.keyCode : event.which);
    if(keycode == '32'){
        nbr++;  
    }else if( nbr == 1){
        event.keyCode
    }
});

编辑:我相信我已经取得了积极成果

HTML

<input type="text" id="inputBox" class="input" autocomplete="off"/>
<p id="key"></p>
<p id="textField"></p>

的jQuery

var value;
var spaceCount = 0;

$( '.input' ).keydown(function(e){
    var value = $( '.input' ).val();
    if( e.keyCode == 32 ){
        spaceCount ++;
        console.log( 'Space count at ' + spaceCount );
    }
    if( e.keyCode == 32 && spaceCount > 1 ){
        e.preventDefault();
    }else if(value == ""){
        spaceCount = 0;
    }
    $( '#key' ).text(spaceCount);
    $( '#textField' ).text(value);
});

jsFiddle

我认为这可以改进,因为当我最初清除输入字段时,spaceCount没有设置为0,直到我输入一个!= 32的keyCode。

感谢大家的帮助:)。


编辑2 感谢@Adjit,我想我找到了更好的解决方案。奇怪的是他的jQuery代码没有用,但JavaScript是(我要仔细检查代码,看看我是否有任何不一致)。但是我确实添加了额外的东西,这是为了防止用户输入空格,如果这是输入的第一个字符。

的JavaScript

document.getElementById('myInput').onkeydown = function(e) {
    if(e.keyCode == 32 && this.value.indexOf(' ') >= 0) {
        document.getElementById('key').innerHTML = "Already a space!";
        e.preventDefault();
    }else if( e.keyCode == 32 && this.value.length == 0 ){
        e.preventDefault();
    }
    else{
        document.getElementById('key').innerHTML = "";
    }
}

jsFiddle

3 个答案:

答案 0 :(得分:1)

我认为最简单的方法是使用jquery keydown 这样的事件:

$(document).ready(function() {
   var spaceCount = 0;
   $("#inputId").keydown(function (e) {

       //space code is 32
       if (e.keyCode == 32)
         spaceCount ++;

       if(spaceCount == 2)
         e.preventDefault();

       else return true;


    });
});

答案 1 :(得分:0)

找出一个更好的方法来做到这一点,没有任何计数器或任何东西 - 它可以用纯Javascript完成

<强> JQuery的

$('#myInput').on('keydown', function(e){
    if(e.keyCode == 32 && $(this).val().indexOf(' ') >= 0){
        $('#key').text('Already a space!');
        return false;
    }
});

Javascript等效

document.getElementById('myInput').onkeydown = function(e) {
  if(e.keyCode == 32 && this.value.indexOf(' ') >= 0) {
    document.getElementById('key').innerHTML = "Already a space!";
    return false;
  }
  else document.getElementById('key').innerHTML = "";
}
<input id="myInput" />
<span id="key"></span>

答案 2 :(得分:0)

最后你只想在单词之间有一个空格而不是多个空格?为什么不等到用户尝试提交表单,然后删除所有额外的空格:

var string = string.replace(/\s{2,}/g, ' ');

DEMO

string输入值

修改

我删除了用于检测空格的on键事件,因为需要测试很多ifs和条件。

  1. 您需要在boolean
  2. 处启动的全局false变量
  3. 使用.on('keypress'检测到空格后...将布尔值设置为true。
  4. 如果变量为true且检测到空格,则执行e.preventDefault()以阻止其添加到输入中。
  5. 如果按下了退格键,您需要记住所有先前空格的位置,以了解退格区是否移除空格或在空格之前。