【问题标题】:Prevent keypress default value when user types用户键入时防止按键默认值
【发布时间】:2018-08-10 11:35:36
【问题描述】:

我想用 b 替换 a,但我总是在 b 之前看到 a。我尝试了其他事件,如 keyup、keydown、event.preventDefault,但它们都不起作用。用户键入时如何防止出现这种“a”视图?

$("#text").keypress(function(event) {
  text2 = $(this).val();
  text2 = text2.replace(/(a)/g, "b");
  $("#text").val(text2);
});

//i tried with keyup, keydown also...
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="text"></textarea>

【问题讨论】:

  • 为什么 -1 已经 ???抱歉,请不要给我发“这个问题已经回答”的链接,因为我在发帖前检查过了

标签: javascript jquery


【解决方案1】:

使用event.preventDefault

$("#text").keypress(function(event) {
  if (event.key === "a") {
    event.preventDefault(); // <================
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="text"></textarea>

这只是阻止a 出现。如果您想在用户键入a 时插入b 而不是a,则需要the techniques in this question's answers。只需调用.val(..) 就会弄乱用户的光标位置(尝试在使用val 更新值时在现有文本前面键入以查看问题)。

使用Tim Down's answer 回答该问题的实时示例:

$("#text").keypress(function(event) {
  if (event.key === "a") {
    event.preventDefault();
    insertTextAtCursor(this, "b");
  }
});
function insertTextAtCursor(el, text) {
    var val = el.value, endIndex, range;
    if (typeof el.selectionStart != "undefined" && typeof el.selectionEnd != "undefined") {
        endIndex = el.selectionEnd;
        el.value = val.slice(0, el.selectionStart) + text + val.slice(endIndex);
        el.selectionStart = el.selectionEnd = endIndex + text.length;
    } else if (typeof document.selection != "undefined" && typeof document.selection.createRange != "undefined") {
        el.focus();
        range = document.selection.createRange();
        range.collapse(false);
        range.text = text;
        range.select();
    }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="text"></textarea>

【讨论】:

  • 好的,先生,这不是我想要的,因为我之前尝试过,但是谢谢
  • @pinug - 怎么样?
  • 哦,我没看到你的上一篇文章,是的,先生!
  • 好吧,我对更新所做的只是展示了一个应用我已经指出的技术的示例。
  • 先生,例如,如何使用“abc”->“b”来做到这一点。因为 event.key 只得到一个字母我错了吗? :/@T.J。克劳德
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-09
相关资源
最近更新 更多