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