0

我正在尝试验证输入框中的输入,因此我需要找到一种方法来删除添加到字符串中的字符。我的想法,使用光标位置。我的实现应该可以工作,但是每次输入获得焦点时,您都​​可以看到少数几个字符的故障。

我的小提琴在:http: //jsfiddle.net/fallenreaper/TSwyk/

我究竟做错了什么?当我想验证时,我不希望它检查并删除错误的字符。

我的javascript代码是(我相信使用jquery 1.7.2):

function getCursorPosition(jqueryItem)
{
    var input = jqueryItem.get(0);
    if (!input) return; // No (input) element found
    if ('selectionStart' in input) {
        // Standard-compliant browsers
        return input.selectionStart;
    } else if (document.selection) {
        // IE
        input.focus();
        var sel = document.selection.createRange();
        var selLen = document.selection.createRange().text.length;
        sel.moveStart('character', -input.value.length);
        $("#sel").html(sel);
        $("#selLen").html(selLen);
        return sel.text.length - selLen;
     }
}
    $(function(){
        alert("loaded");
        $("input").on("input", function(){
            var cPos = getCursorPosition($(this));
            $("#cursorPos").html(cPos);
            var FLAG = 'a';
            $("#charatpos").html($(this).val().charAt(cPos));
            $("#"+$(this).attr("id")+"count").html($(this).val().length);
            if($(this).val().charAt(cPos) == FLAG){
                var str = $(this).val();
                var sArr = str.split("");
                sArr.splice(cPos,1);
                str = sArr.join("");
                $(this).val(str);
            }
        });
    });
4

1 回答 1

0

这可以通过将事件更改为.keypress()而不是on("input")来解决。这样就不会有差异,仍然可以完成工作。作为旁注,请确保在使用 keypress() 时,为删除部分添加一个简单的:

event.preventDefault();  

所以这种方式传播不会继续。这样,新键实际上也不会被按下并显示出来。

于 2013-03-11T13:23:06.673 回答