在发生之前停止按键

时间:2016-01-08 02:19:44

标签: javascript jquery

我试图在发生之前阻止以下按键发生:

  

' " / * - +

我尝试过使用以下各种变体:

<textarea>Here may the forbidden characters not enter</textarea>

<script>
function onKeyDown(event) {   
    event.preventDefault();
}
</script>

..但是没有成功。背景是它链接到一个即时更新数据库的jQuery,但我不希望在数据库中看到这些字符,因此需要在它们发生之前将它们停止。想法?

3 个答案:

答案 0 :(得分:1)

此代码会阻止", ', *, +, -, /中的<textarea>个字符。

$(function(){
    // ", ', *, +, -, /
    var disabledOn = [34, 39, 42, 43, 45, 47];
    $('textarea').on('keypress', function(ev){
    if ($.inArray(ev.which, disabledOn) >= 0){
        ev.preventDefault();
    }
  });
})

Fiddle

答案 1 :(得分:0)

除了阻止特定的按键,您还可以在更改和键盘事件上清理textarea,如下所示:

$("#thisTextarea").change(function() { removeSpecialChars($(this)) });

$("#thisTextarea").keyup(function()  { removeSpecialChars($(this)) });

function removeSpecialChars($textarea) {
   $textarea.val($textarea.val().replace(/\'|\"|\/|\*|\-|\+/g,''));
}

https://jsfiddle.net/wagbw8nh/

答案 2 :(得分:0)

虽然让客户端代码写入数据库并不是一个好主意,但实际上非常糟糕,只要有人输入,一个解决方案就是event.preventDefault()

$(document).on("keydown", function(e){
  var k = e.keyCode;
  var nonShifted = [222, 191, 189];
  var shifted = [56, 187];
  if (nonShifted.indexOf(k) !== -1 || (shifted.indexOf(k) !== -1 && e.shiftKey)){
    e.preventDefault();
  }
})

codepen