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

これは、イベントをon("input")ではなく.keypress()に変更することで解決されます。そのように不一致はなく、それでも仕事を成し遂げることができます。補足として、keypress() を使用するときは、削除セクションに単純なものを追加するようにしてください。

event.preventDefault();  

そうすれば、伝播は続きません。そうすれば、新しいキーは実際には押されず、まったく表示されません。

于 2013-03-11T13:23:06.673 に答える