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

Javascript 防止删除文本框中的特殊字符,javascript,jquery,Javascript,Jquery,我想防止用户在按下backspace或canc时删除文本框中的任何“/”字符 例如: 如果文本框值为2014/09/,并且用户按backspace键,则“/”字符将不会被删除 如何在keypup或keypdownevenets中执行此操作 $("#textboxId").keyup(function(){ // any idea }); 我已经用字符串操作完成了 在这里检查我的小提琴 希望这对您有所帮助您有三种情况: 用户按下backspace并删除光标前的字符 用户按下canc并删

我想防止用户在按下
backspace
canc
时删除文本框中的任何“/”字符

例如:

如果文本框值为
2014/09/
,并且用户按backspace键,则“/”字符将不会被删除

如何在
keypup
keypdown
evenets中执行此操作

$("#textboxId").keyup(function(){

   // any idea

});

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

在这里检查我的小提琴


希望这对您有所帮助您有三种情况:

  • 用户按下
    backspace
    并删除光标前的字符
  • 用户按下
    canc
    并删除光标后的字符
  • 用户选择文本并按
    backspace
    canc
    删除所选文本
  • 所以你必须解决所有这些不同的情况

    此代码将起作用:

    $('#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);
    
    工作示例:

    给你=>

    (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;
        }
    });
    
    我从函数中获得了一些帮助,以确定光标的当前位置


    注意到,在反对所有其他答案和想法的情况下,这实际上会像掩码一样工作,即使光标在文本的中间也不会被删除! 你不想删除

    /
    ?我建议你使用我想这就是你想要的require@Khaleel是的,我不想删除/@Satpal我不想使用mask pluginga如果将文本框值作为字符串获取,则获取最后一个/,,并将子字符串设置为文本框的新值?你让它变得非常复杂。@MarcoBonelli是的,因为我希望它在所有情况下都能正常工作。如果你将插入符号放在开头并使用CANC键,它将删除所有文本…@AminJafari我没有选择jQuery库,对不起。它现在很好用,几乎可以用了。问题是,当我完全选择文本框并键入将删除/也删除的内容时,它在select+delete上运行良好。@MarcoBonelli,这是预期的解决方案。你怎么说它不起作用?
    (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;
        }
    });