【问题标题】:Javascript input changeJavascript 输入更改
【发布时间】:2016-06-18 14:55:33
【问题描述】:

可以改变键盘的输入值吗?

例如:

您按下键盘上的 a 键,但输入元素中将输入b,而不是a

您输入abc,但在输入元素中将是def

我尝试捕获keydown 事件,然后使用CustomEvent / Event 触发keydown 事件,但这对我不起作用。事件捕获很好,但是当我使用新的 charCodekeyCode 创建另一个 keydown 事件时,不会在输入中输入“新”字符。

那么,是否可以在不使用value 属性或任何其他处理或修改输入的全部内容的方法的情况下将某些内容写入到插入符号的位置的输入元素中。所以只需插入或粘贴一个字母。

JS

function keydown(e) {
    e.preventDefault();

    var event = new Event('keydown');
    event.charCode = 65;
    element.dispatchEvent(event);
}

HTML

<input type="text" onkeydown="keydown(event)">

可能,这种方式是不可能的,但到目前为止我还没有任何其他想法......

【问题讨论】:

  • @Gothdo:他们什么时候不再允许这样做了?
  • @Gothdo 好的,但是否有任何其他可能性,例如:将文本粘贴到插入符号或所选区域?
  • @Gothdo:该页面上的任何答案都可以在 chrome 中使用吗?我刚刚尝试了几个没有运气......我曾经有工作的代码,它也停止了......
  • @dandavis This 可能是最新的答案。事实证明我是对的,键盘事件不能用 JavaScript 触发。

标签: javascript keyboard dom-events contenteditable


【解决方案1】:

使用以下代码在您键入内容时获取光标位置。获得光标位置后,您可以替换字符并将文本设置回文本框。让我知道您希望代码将光标放回它替换字符的位置。

<script type="text/javascript">
function getLocation(ctrl)
{
    var position = 0;

    if (document.selection) {

        ctrl.focus ();
        var sel = document.selection.createRange ();

        sel.moveStart ('character', -ctrl.value.length);

        position = Sel.text.length;
    }
    else if (ctrl.selectionStart || ctrl.selectionStart == '0')
        position = ctrl.selectionStart;

    alert (position);
}

</script>
<input type="text" onkeyup="getLocation(this);"></input>

【讨论】:

  • 谢谢,我知道这个解决方案,但是如果我替换字符,我必须更改整个值
【解决方案2】:

我用document.execCommand()找到了另一种方法:

document.querySelector("input")
.addEventListener("keypress", function (event) {
  event.preventDefault();
  document.execCommand('insertText', false, 'b');
})
&lt;input&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2012-08-03
    • 2010-12-31
    • 2013-04-03
    相关资源
    最近更新 更多