防止删除文本框中的特殊字符

Prevent removing special character in textbox

本文关键字:特殊字符 文本 删除      更新时间:2023-09-26

我想防止用户在按下backspacecanc时删除文本框中的任何"/"字符。

例如:

如果文本框值为2014/09/,并且用户按退格键,则不会删除"/"字符。

我如何在keyupkeydown的晚上做到这一点?

$("#textboxId").keyup(function(){
   // any idea
});

您有三种情况:

  1. 用户按下backspace并删除光标前的字符
  2. 用户按下canc并删除光标后的字符
  3. 用户选择文本并按下backspacecanc并删除所选文本

所以你必须解决所有这些不同的情况。

此代码将起作用:

$('#textareaId')[0].addEventListener("keydown", function(e) {
    var start = this.selectionStart,
        end = this.selectionEnd,
        value = this.value,
        key = e.keyCode;
    if (key == 8 && value[start-1] == '/') e.preventDefault();
    if (key == 46 && value[start] == '/') e.preventDefault();
    if ((key == 8 || key == 46) && value.substring(start, end).indexOf('/') != -1) e.preventDefault();
}, false);

工作示例:http://jsfiddle.net/MeBeiM/7hdb3472/1

我已经使用字符串操作完成了

在这里检查我的小提琴http://jsfiddle.net/7ek11cfs/21/

$('textarea').keydown(function(e) {
   textValue = $(this).val();
});
$('textarea').keyup(function(e) {
 if(textValue.charAt(textValue.length-1)=='/')
 {
   $('textarea').val(textValue);
 }
});

希望这能帮助

到此为止=>演示

(function ($, undefined) {
    $.fn.getCursorPosition = function() {
        var el = $(this).get(0);
        var pos = 0;
        if('selectionStart' in el) {
            pos = el.selectionStart;
        } else if('selection' in document) {
            el.focus();
            var Sel = document.selection.createRange();
            var SelLength = document.selection.createRange().text.length;
            Sel.moveStart('character', -el.value.length);
            pos = Sel.text.length - SelLength;
        }
        return pos;
    }
})(jQuery);
$("#textboxId").keydown(function(e){
    var currentPos=$(this).getCursorPosition();
    var lastChar=$(this).val().substr((currentPos- $(this).val().length)- 1);
    if(e.which==8 && lastChar.match(/^'//g) ){
        e.preventDefault();
        return false;
    }
});

我从THIS ANSWER中获得了一些帮助,用于识别光标当前位置的函数。

注意,与找到的所有其他答案和想法相反,这实际上就像一个面具,即使光标在文本中间也不会被删除!