1. mirror
  2. jquery

Commits

Dave Methvin  committed 2bbc3d5

Fix #13471. $().on(".xyz"...) should avoid later crash.

If the event type is an empty string we end up hanging in .off() which makes for
mighty hard debugging. Instead treat it as a no-op. Docs seem clear this is not
allowed.

  • Participants
  • Parent commits 31478b9
  • Branches master

Comments (0)

Files changed (2)

File src/event.js

View file
 			tmp = rtypenamespace.exec( types[t] ) || [];
 			type = origType = tmp[1];
 			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+			
+			// There *must* be a type, no attaching namespace-only handlers
+			if ( !type ) {
+				continue;
+			}
 
 			// If event changes its type, use the special event handlers for the changed type
 			special = jQuery.event.special[ type ] || {};

File test/unit/event.js

View file
 	jQuery("#firstp").trigger("custom");
 });
 
+test("namespace-only event binding is a no-op", function(){
+	expect(2);
+
+	jQuery("#firstp")
+		.on( ".whoops", function() {
+			ok( false, "called a namespace-only event" );
+		})
+		.on( "whoops", function() {
+			ok( true, "called whoops" );
+		})
+		.trigger("whoops")	// 1
+		.off(".whoops")
+		.trigger("whoops")	// 2
+		.off("whoops");
+});
+
 test("bind(), with same function", function() {
 	expect(2);