什么是验证HTML文本输入的最佳方法,当它被键入时?我所知道的所有方法都有一些缺点:
- 使用
$.keypress
只能访问输入框的旧值,而无法访问新值。此外,某些事件(如使用鼠标剪切/粘贴)将不会被检测到。 - 使用
$.change
仅在输入框失去焦点时起作用。 - 这个问题 提出了一种解决方案,其中使用轮询来监视属性更改。原则上,在回调中验证新值,如果无效,则恢复为旧值。然而,除了需要轮询外,我不确定它是否没有竞争条件。
- 这篇文章 建议当浏览器特定功能存在时使用它们,如果没有可用的功能,则退回到轮询。看起来是迄今为止最好的方法。
- [更新] 如答案中所指出的,
$.keyup
可以访问更新后的值。但是,它不仅不能用于鼠标剪切/粘贴,而且如果按住键盘不放,只释放了很多输入后就会失败。或者,如果结合使用keydown
和keyup
来保存/恢复旧值,则在用户输入过快时会出现问题。
如果实施此验证会出现新问题,欢迎提出反对意见;不过在其他语言中这似乎很常见,所以我认为想要这样做并不是件坏事。
(如果有)
注意:请保留HTML标记。