使用jQuery检测表单输入上的自动完成

我有一个表单,检测所有文本字段是否在每个keyup()和focus(); 如果它们全部有效,它将启用用户按下的提交按钮。 但是,如果用户使用浏览器自动完成function填写其中一个文本输入,则会阻止启用提交按钮。

有没有办法使用jQuery检测是否有任何输入已经改变,无论它是如何被更改的?

jQuery更改事件只会触发模糊。 keyup事件将在您键入时触发。 单击自动完成选项时都不会触发。 我也在寻找一种检测方法,但我现在正在寻找

$(selector).bind("change keyup",function(){ //Do something, probably with $(this).val() }); 

但它并没有完全解决问题……

您可以尝试使用on input来检测基于文本的更改(除了ctrlshift类的键)。

例如:

 $(input).on('input', function() { console.log($(this).val()); }); 

我自己用过的

 $(selector).on("change keyup blur input", function() {}); 

这在Chrome中起了作用。 input是使其适用于自动完成的原因。

我的问题是检测自动填充(通过像lastpass或1password这样的插件)以及上述问题。

对我有用的解决方案是:

 $(function(){ function validate(){ if($('#email').val() !== '' && $('#password').val() !== '') $('#submit').prop('disabled', false); else $('#submit').prop('disabled', true); } // Validate after user input $('#email, #password').on('keyup change', validate); // Validate on mouse enter of body and login form // to catch auto-fills from roboform/1password etc... $('body, #loginform').on('mouseenter', validate); // Validate onload incase of autocomplete/autofill validate(); }); 

请参阅JSFiddle中的演示 。

遇到同样的问题后,我有一个不错的解决方案。 将keyup设置为我们的表单字段的正常,然后鼠标hover到周围的div。 因此,一旦单击自动完成选项,鼠标将位于div的顶部:

 $("#emailaddress").bind("keyup", function() { displayFullSubcribeForm(); }); $(".center_left_box").bind("mouseover", function() { displayFullSubcribeForm(); }); 

您可以使用jQuery .change()函数。

页面最初加载后,您可以validation整个表单,只是为了检查它实际上是否未填写。之后,您可以使用.change()来检查表单上的内容是否已更改,如果有任何更改,再次validation表格。

 $(document).ready(function() { // validate form once, just to be sure (if valid, activate submit button) }); ... 

B计划

另一种选择是始终使提交按钮可单击,但使用.submit()将其绑定到表单validation器。 然后如果表格有效,继续。 如果表单无效,请使用.preventDefault()来停止提交表单…..并且您也会显示一条警告消息,指示缺少的字段。

答案已在这个问题中给出。 它不使用jQuery,但它适用于自动完成:

使用js onpropertychange事件。

我希望在一个不会无效的场地上有一个非常好的用户体验(在我的情况下变为红色),只要用户合理活跃,例如仍然填写场地。

要为正常输入执行此操作,我可以使用debouncefunction连接到keyup ,同时连接blur以立即进行validation。 虽然看起来keyup是由lastpass触发的,但是由于我已经去掉它,所以validation有一个延迟。 感谢@ peter-ajtai我尝试添加change事件,它确实捕获了最后一个传递并留下了其他细节。

Coffeescript示例:

@fieldExp .keyup($.debounce(@_onExpChange, 3000)) .blur(@_onExpChange) .change(@_onExpChange)

这很好用,lastpass表单填充触发立即validation。

这是最终的解决方案,保证工作

 $(document).bind('mouseover', function(){ liveValidate(); });