@@ -386,6 +386,9 @@ describe('form', function() {
386
386
doc = jqLite ( '<form ng-submit="submitMe()">' +
387
387
'<input type="submit" value="submit">' +
388
388
'</form>' ) ;
389
+ // Support: Chrome 60+ (on Windows)
390
+ // We need to add the form to the DOM in order for `submit` events to be properly fired.
391
+ window . document . body . appendChild ( doc [ 0 ] ) ;
389
392
390
393
var assertPreventDefaultListener = function ( e ) {
391
394
reloadPrevented = e . defaultPrevented || ( e . returnValue === false ) ;
@@ -420,15 +423,18 @@ describe('form', function() {
420
423
inject ( function ( $timeout ) {
421
424
doc = jqLite ( '<div>' +
422
425
'<form ng-submit="submitMe()">' +
423
- '<button ng-click="destroy()"></button>' +
426
+ '<button type="submit" ng-click="destroy()"></button>' +
424
427
'</form>' +
425
428
'</div>' ) ;
429
+ // Support: Chrome 60+ (on Windows)
430
+ // We need to add the form to the DOM in order for `submit` events to be properly fired.
431
+ window . document . body . appendChild ( doc [ 0 ] ) ;
426
432
427
433
var form = doc . find ( 'form' ) ,
428
434
destroyed = false ,
429
435
nextTurn = false ,
430
436
submitted = false ,
431
- reloadPrevented ;
437
+ reloadPrevented = 'never called' ;
432
438
433
439
scope . destroy = function ( ) {
434
440
// yes, I know, scope methods should not do direct DOM manipulation, but I wanted to keep
@@ -466,6 +472,12 @@ describe('form', function() {
466
472
// the issue in the wild, I'm not going to bother to do it
467
473
// now. (i)
468
474
475
+ // Support: Chrome 60+ (on Windows)
476
+ // Chrome 60+ on Windows does not fire `submit` events when the form is not attached to
477
+ // the DOM. Verify that the `submit` listener was either never fired or (if fired) the
478
+ // reload was prevented.
479
+ expect ( reloadPrevented ) . not . toBe ( false ) ;
480
+
469
481
// prevent mem leak in test
470
482
form [ 0 ] . removeEventListener ( 'submit' , assertPreventDefaultListener ) ;
471
483
} )
0 commit comments