From 17f0e26ad9eba67ab274d12274cf7c23c8c688fd Mon Sep 17 00:00:00 2001 From: Devin Wilson Date: Wed, 13 Jan 2016 21:06:43 -0700 Subject: [PATCH] Event: Fix chaining .on() with null handlers Fixes gh-2846 --- src/event.js | 2 ++ test/unit/event.js | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/event.js b/src/event.js index ddd92c5fc..c8a14fe7d 100644 --- a/src/event.js +++ b/src/event.js @@ -70,6 +70,8 @@ function on( elem, types, selector, data, fn, one ) { } if ( fn === false ) { fn = returnFalse; + } else if ( !fn ) { + return elem; } if ( one === 1 ) { diff --git a/test/unit/event.js b/test/unit/event.js index 4a5611be8..fd7d86f7f 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -5,6 +5,28 @@ QUnit.module( "event", { teardown: moduleTeardown } ); +QUnit.test( "null or undefined handler", function( assert ) { + assert.expect( 4 ); + + // Supports Fixes bug #7229 + try { + jQuery( "#firstp" ).on( "click", null ); + assert.ok( true, "Passing a null handler will not throw an exception" ); + } catch ( e ) {} + + try { + jQuery( "#firstp" ).on( "click", undefined ); + assert.ok( true, "Passing an undefined handler will not throw an exception" ); + } catch ( e ) {} + + var expectedElem = jQuery( "#firstp" ); + var actualElem = expectedElem.on( "click", null ); + assert.equal(actualElem, expectedElem, "Passing a null handler should return the original element"); + + actualElem = expectedElem.on( "click", undefined ); + assert.equal(actualElem, expectedElem, "Passing a null handler should return the original element"); +} ); + QUnit.test( "on() with non-null,defined data", function( assert ) { assert.expect( 2 );