微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在文本输入字段中获取新值并取消事件?

如何解决如何在文本输入字段中获取新值并取消事件?

我有一个输入 (type=text),我想在更改后检查该值是否有效。目前我这样做:

<input type="text" onkeypress="return validateInput(event)"></input>
function validateInput(event) {
    var ascii = event.keyCode;
    if(ascii == 0) {
        return false;
    }
}

问题是,我不仅需要检查输入的字符是什么,还需要检查它在字符串中的位置。因此我想知道输入的新值,但 onkeypress 事件似乎没有这样的属性onchange 事件允许我获取新值并将其与旧值进行比较,但随后我将无法再通过返回 false 来取消该事件。

有没有办法将取消事件和知道新值(或新字符添加到当前字符串的位置)结合起来?

解决方法

选项 1

您可以使用 Event.preventDefault() 来阻止与事件关联的默认行为。

False
function validateInput(event) {
    let ascii = event.keyCode;
    if(ascii == 0) {
        event.preventDefault();
    }
}

有了这个解决方案,您必须考虑的是 <input type="text" onkeypress="return validateInput(event)"></input> 阻止了抛出实例可能具有的默认行为。当您依赖此默认行为时,这可能会成为一个问题。但在这种情况下,您故意阻止元素的默认行为(即向其内容添加字符)。

选项 2

您可以简单地记住更改前的文本,然后在更改无效时将其恢复。

Event.preventDefault()
var previousValue = "";
var iskeyDown = false;

function savePrevious(event)
{
  if(iskeyDown == false) // If the button wasn't released since the last evoke of this event...
  {
    // Do nothing
    return;
  }
  // Save the value before the change
  previousValue = document.getElementById("MyInput").value
  
  //Remember the key is pressed
  iskeyDown = true;
}

function validateInput(event)
{
  let myInputElement = document.getElementById("MyInput")
  console.log(myInputElement.value)
  if(true) // If new value is invalid...
  {
    //Roll back to before the change
    myInputElement.value = previousValue
  }
  // Remember that the key has been released
  iskeyDown = false;
}

并不是在对文本框的 <input id="MyInput" type="text" onkeydown="savePrevious(event)" onkeyup="validateInput(event)"></input> 成员进行更改之前执行 keydownkeypress,之后执行 value

还应该注意的是,某些浏览器可能会多次发送这些事件,因此您需要一种机制(此处使用 keyup 实现)来避免对同一事件多次做出反应。否则你可能会得到奇怪的结果。

,

我相信您正在寻找的事件是输入,您可以阅读它here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?