如何仅替换按下的字符;使用Javascript / jQuery

时间:2016-01-10 07:41:12

标签: javascript jquery javascript-events keyboard-events

让我们说有textarea已经存在的文字例如: AA 。我们如何检测按下的键并仅使用其他内容更改字符。现在,如果通过键盘文本按下 A 键,则应该 AAB 已存在 A < / em> 字符未被更改但新按下的 键应在textarea中写入 B 。< / p>

我的代码是

<textarea>aa</textarea>

<script>
    jQuery('textarea').keyup(function (e) {
        //THIS REPLACES ALL THE TEXT NOT JUST THE PRESSED CHARACTER
        //Need code that should replace just this pressed key not all text of textarea
        jQuery('textarea').val(jQuery('textarea').val().replace(/a/g, "b"));
    });
</script>

理想的解决方案将从按下的键e中选择字符并替换它,但如果不可能,那么替换textarea中的最后一个字符可能是一个不好的解决方法。

如果使用keypresskeydown或类似事件,也可以。

1 个答案:

答案 0 :(得分:2)

试试这个:

由于e.keyCode是只读的。我阻止它进入并添加了更改的字符。

MarkPiezak的信用,这里的代码的一部分:Set keyboard caret position in html textbox

&#13;
&#13;
$(function(){
  $("#ta").keydown(function(e){
    var newKey = e.keyCode + 1;
    var newChar = String.fromCharCode(newKey);
    $("#pressed-key").text(e.keyCode + "->" + newKey + "->" + newChar);
    if (e.keyCode > 47 && e.keyCode < 91) {
      e.preventDefault();
      var cursorPosition = $('textarea').prop("selectionStart");
      var ta = document.getElementById("ta");
      ta.value = [ta.value.slice(0, cursorPosition), newChar, ta.value.slice(cursorPosition)].join('');
      setCaretPosition("ta", cursorPosition+1);
    }
  });
  
  //This one is from https://stackoverflow.com/questions/512528/set-cursor-position-in-html-textbox
  function setCaretPosition(elemId, caretPos) {
    var elem = document.getElementById(elemId);

    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();
        }
    }
  }
  
  
  $("#ta2").keydown(function(e){
    var sentence = "I am a monster!";
    if (e.keyCode > 47 && e.keyCode < 91) {
      e.preventDefault();
      var ta = document.getElementById("ta2");
      ta.value += sentence[ta.value.length] || "";
    }
  });
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<textarea id="ta">aa</textarea>
<p id="pressed-key"></p>

<hr>
<p>This one is just for fun. Try answering this: Who are you?</p>
<textarea id="ta2"></textarea>
&#13;
&#13;
&#13;