javascript - 不允许在文本输入中键入或粘贴空格,并保持文本和插入符号位置相同

标签 javascript validation input

我有一个我不想要空格的文本输入。如果有人键入空格或粘贴带有空格的文本,我想将文本更改回输入空格之前的内容,并保留插入符号位置相同。也许有更简单的方法可以做到这一点,但我想不出来。

这是我目前所拥有的:

<html><head><title>Test</title></head><body>

<input type=text id="inputText" value="testValue" onInput=doIt(this);>

</body></html>​

以及将包含的 javascript(我使用了 jsFiddle):

var editedValue = "testValue";

// alert(editedValue);

function doIt(that)
{

var caretPos = that.selectionStart;

if (that.value.indexOf(" ") != -1)
{
that.value = editedValue;
// alert(caretPos);
that.selectionStart = caretPos;
}
else
{
editedValue = that.value;
}

}​

似乎一切正常,除了,如果插入符号位于文本中间,并且您键入或粘贴空格,插入符号不会返回到原始位置。

谁能帮我解决这个问题?或者向我展示一种全新/更简单/更简单的方法来不允许在文本输入中键入或粘贴空格?

如果有帮助,这是我正在尝试的 jsfiddle:http://jsfiddle.net/djSnL/4/

最佳答案

http://jsfiddle.net/djSnL/5/

您想捕获 onkeydown 事件:

function doIt(e)
{
    var e = e || event;

    if (e.keyCode == 32) return false; // 32 is the keycode for the spacebar

}

window.onload = function(){
    var inp = document.getElementById("inputText");

    inp.onkeydown = doIt;
};

请注意,他们仍然可以将空格粘贴到输入中,因此您也必须处理它。

要处理粘贴,很简单:http://jsfiddle.net/djSnL/7/

function pasteIt(e)
{
    var e = e || event;

    this.value = this.value.replace(/\s/g,'');

}

两者兼顾,您将获得理想的效果。

我不是 100% 确定,但我相信只有 webkit 浏览器会在粘贴之前让您知道数据是什么:http://jsfiddle.net/djSnL/8/

function pasteIt(e)
{
    var e = e || event;
    var data = e.clipboardData.getData("text/plain");

    if (data.match(/\s/g)) return false;    
}

关于javascript - 不允许在文本输入中键入或粘贴空格,并保持文本和插入符号位置相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12697203/

相关文章:

javascript - 为 tensorflow.js lstm 将 1d 数组 reshape 为 3d

javascript - 滑入新内容的最佳方法是什么?

javascript - 如何检查字符串是否为自然数?

javascript - 如何检查 MongoDB 数据库中是否已存在具有某些字段的文档?

java - 验证设计和文档

html - 将标签定位在输入上,How-To?

input - 在 JavaFX 中创建数字 TextField 的推荐方法是什么?

javascript - D3 V3 到 D3 V4 树数组使用层次结构重新排序错误

css - 文本输入 - 文本出现在中间?

ruby-on-rails - simple_form 未检测嵌套属性的触发验证