在键入时验证 HTML 文本输入的最佳方法是什么?我所知道的所有方法都有一些缺点:
使用
$.keypress
您只能访问输入的旧值,而不能访问新值。此外,某些事件(如使用鼠标剪切/粘贴)将不会被检测到。使用
$.change
仅在输入失去焦点时有效。这个问题提出了一个解决方案,您可以使用轮询来监视属性更改。原则上,可以在回调中验证新值,如果无效则返回旧值。但是,除了需要轮询之外,我不确定它是否没有竞争条件。
本文建议在存在时使用浏览器特定功能,如果没有可用功能,则回退到轮询。看起来是迄今为止最好的方法。
[更新]正如答案中所指出的,
$.keyup
在更新后访问该值。但是,它不仅不适用于鼠标剪切/粘贴,而且如果您按住某个键也会失败,只有在输入很多后才能释放。或者,如果合并keydown
并keyup
保存/恢复旧值,如果用户输入太快,它就会中断。
上述解决方案都不是无错误的或真正安全的跨浏览器。是否有更好的解决方案,无论是现成的还是正在制定的?似乎是一个普遍的问题,我最近试图回答类似的 问题,但没有成功,我也对答案很感兴趣。
(也欢迎反对这种做法的好论据,以防在实施此验证时会出现新问题;但是,这在其他语言中似乎很常见,所以我怀疑这是一件坏事)