@@ -100,11 +100,11 @@ describe('Core htmx Regression Tests', function() {
100100 it ( 'does not submit with a false condition on a form' , function ( ) {
101101 this . server . respondWith ( 'POST' , '/test' , 'Submitted' )
102102 var defaultPrevented = false
103- htmx . on ( 'click ' , function ( evt ) {
103+ htmx . on ( 'submit ' , function ( evt ) {
104104 defaultPrevented = evt . defaultPrevented
105105 } )
106- var form = make ( '<form hx-post="/test" hx-trigger="click [false]"></form>' )
107- form . click ( )
106+ var form = make ( '<form hx-post="/test" hx-trigger="submit [false]"><button id="b1">submit</button ></form>' )
107+ byId ( 'b1' ) . click ( )
108108 this . server . respond ( )
109109 defaultPrevented . should . equal ( true )
110110 } )
@@ -385,6 +385,93 @@ describe('Core htmx Regression Tests', function() {
385385 span . click ( )
386386 } )
387387
388+ it ( 'a htmx enabled element inside a form button will prevent the button submitting a form' , function ( done ) {
389+ var defaultPrevented = 'unset'
390+ var form = make ( '<form><button><span hx-get="/foo">test</span></button></form>' )
391+ var button = form . firstChild
392+ var span = button . firstChild
393+
394+ htmx . on ( button , 'click' , function ( evt ) {
395+ // we need to wait so the state of the evt is finalized
396+ setTimeout ( ( ) => {
397+ defaultPrevented = evt . defaultPrevented
398+ try {
399+ defaultPrevented . should . equal ( true )
400+ done ( )
401+ } catch ( err ) {
402+ done ( err )
403+ }
404+ } , 0 )
405+ } )
406+
407+ span . click ( )
408+ } )
409+
410+ it ( 'from: trigger on form prevents default form submission' , function ( done ) {
411+ var defaultPrevented = 'unset'
412+ var form = make ( '<form id="test-form" action="/submit"><input type="submit" value="Submit"></form>' )
413+ var div = make ( '<div hx-post="/test" hx-trigger="submit from:#test-form"></div>' )
414+ var submitBtn = form . firstChild
415+
416+ htmx . on ( form , 'submit' , function ( evt ) {
417+ defaultPrevented = evt . defaultPrevented // Capture state before our preventDefault
418+ evt . preventDefault ( ) // Prevent navigation in case test fails
419+ setTimeout ( ( ) => {
420+ try {
421+ defaultPrevented . should . equal ( true )
422+ done ( )
423+ } catch ( err ) {
424+ done ( err )
425+ }
426+ } , 0 )
427+ } )
428+
429+ submitBtn . click ( )
430+ } )
431+
432+ it ( 'from: trigger on button prevents default form submission' , function ( done ) {
433+ var defaultPrevented = 'unset'
434+ var form = make ( '<form><button id="test-btn" type="submit">Submit</button></form>' )
435+ var div = make ( '<div hx-post="/test" hx-trigger="click from:#test-btn"></div>' )
436+ var button = byId ( 'test-btn' )
437+
438+ htmx . on ( button , 'click' , function ( evt ) {
439+ defaultPrevented = evt . defaultPrevented // Capture state before our preventDefault
440+ evt . preventDefault ( ) // Prevent form submission in case test fails
441+ setTimeout ( ( ) => {
442+ try {
443+ defaultPrevented . should . equal ( true )
444+ done ( )
445+ } catch ( err ) {
446+ done ( err )
447+ }
448+ } , 0 )
449+ } )
450+
451+ button . click ( )
452+ } )
453+
454+ it ( 'from: trigger on link prevents default navigation' , function ( done ) {
455+ var defaultPrevented = 'unset'
456+ var link = make ( '<a id="test-link" href="/page">Go to page</a>' )
457+ var div = make ( '<div hx-get="/test" hx-trigger="click from:#test-link"></div>' )
458+
459+ htmx . on ( link , 'click' , function ( evt ) {
460+ defaultPrevented = evt . defaultPrevented // Capture state before our preventDefault
461+ evt . preventDefault ( ) // Prevent navigation in case test fails
462+ setTimeout ( ( ) => {
463+ try {
464+ defaultPrevented . should . equal ( true )
465+ done ( )
466+ } catch ( err ) {
467+ done ( err )
468+ }
469+ } , 0 )
470+ } )
471+
472+ link . click ( )
473+ } )
474+
388475 it ( 'check deleting button during click does not trigger exception error in getRelatedFormData when button can no longer find form' , function ( ) {
389476 var defaultPrevented = 'unset'
390477 var form = make ( '<form><button>delete</button></form>' )
0 commit comments