表单没有方法'submit'(angularjs表单自动填充问题解决方法)

时间:2014-01-22 20:51:26

标签: javascript angularjs

我遇到了一个问题,当浏览器自动填充字段时,我的模型不会更新。我选择Ezekiel Victor的答案,看起来像我需要的,但我在实施它时遇到了麻烦。

angular.module('roomsApp.directives', []).directive('formAutofillFix', ['$timeout',
function ($timeout) {
  return function(scope, elem, attrs) {
    // Fixes Chrome bug: https://groups.google.com/forum/#!topic/angular/6NlucSskQjY
    elem.prop('method', 'POST');

    // Fix autofill issues where Angular doesn't know about autofilled inputs
    if(attrs.ngSubmit) {
      setTimeout(function() {
        elem.unbind('submit').submit(function(e) {
          e.preventDefault();
          elem.find('input, textarea, select').trigger('input').trigger('change').trigger('keydown');
          scope.$apply(attrs.ngSubmit);
        });
      }, 0);
    }
  };
});

我收到错误:

elem.unbind('submit').submit(function(e) {

在Firefox中:elem.unbind(...)。submit不是函数

在Chrome中:对象[object object]没有方法'submit'

在网上挖掘之后,导致此错误的最常见的事情是输入字段被命名为“提交”,但我没有遇到该特定问题

<form form-autofill-fix  ng-submit="login()" id="login-fields">
    <input form="login-fields" ng-model="userLogin" type="email" name="username" ng-required/>
    <input form="login-fields" ng-model="userPassword" type="password" name="password" ng-required />
    <button form="login-fields" name="login"">Login </button>
</form>

我很欣赏对此的任何见解。

参考文献:

http://victorblog.com/2014/01/12/fixing-autocomplete-autofill-on-angularjs-form-submit/

"Submit is not a function" error in JavaScript

AngularJS - using a form and auto-completion

AngularJS browser autofill workaround by using a directive

2 个答案:

答案 0 :(得分:0)

尝试将elem变量转换/转换为像这样的角元素......

elem = angular.element(elem);

然后尝试unbind

答案 1 :(得分:0)

刚遇到同样的问题,但幸运的是,Chrome会在自动填充时触发更改事件。

我的修复如下:

<input ng-model="invoiceAddress.firstName" ng-model-options="validatorBehavior" .... >

控制器中的validatorBehaviour是:

$scope.validatorBehavior = { updateOn: 'change blur' };

这样您的模型将在更改时更新,因此在自动填充时更新。