How to catch event.keyCode and change it to another keyCode?

前端 未结 4 1816
無奈伤痛
無奈伤痛 2020-12-06 10:56

I have checked other questions here at SO, however they do not answer my question. I want to simply catch certain keyCode and replace it with another. I am working with char

4条回答
  •  孤城傲影
    2020-12-06 11:27

    I am using the following code to achieve the same result as if I had changed the keyCode, without actually being able to change it.

    function inputValidation() {
        var srcField = event.srcElement;
        var sKey = event.keyCode;
        var inputLetter = String.fromCharCode(sKey);
        if (typeof(srcField) !== "undefined" && srcField !== null) {
            inputLetter = transformInput(inputLetter);
            var caretPos = srcField.selectionStart;
            var startString = srcField.value.slice(0, srcField.selectionStart);
            var endString = srcField.value.slice(srcField.selectionEnd, srcField.value.length);
            srcField.value = startString + inputLetter + endString;
            setCaretPosition(srcField, caretPos+1); // '+1' puts the caret after the input
            event.preventDefault ? event.preventDefault() : event.returnValue = false; //for IE8
       }
    }
    

    srcField.selectionStart gives the starting position of the text you have selected and srcField.selectionEnd gives the end position of the selection, if you haven't selected any text srcField.selectionStart equals srcField.selectionEnd.

    The function setCaretPosition came from this answer by kd7. I only changed it to make it receive the element instead of its Id

    function setCaretPosition(elem, caretPos) {
        if (elem != null) {
            if (elem.createTextRange) {
                var range = elem.createTextRange();
                range.move('character', caretPos);
                range.select();
            } else {
                if (elem.selectionStart) {
                    elem.focus();
                    elem.setSelectionRange(caretPos, caretPos);
                } else
                    elem.focus();
            }
        }
    }
    

提交回复
热议问题