aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Methvin <dave.methvin@gmail.com>2013-02-26 12:19:04 -0500
committerDave Methvin <dave.methvin@gmail.com>2013-02-26 12:19:09 -0500
commit2bbc3d5860b81e128cd92f865673e10046caac7d (patch)
tree3816e3bf5e9e284e4f757cbc8856931ba516839e
parent31478b90128a60585c087bee57d31148677a99cd (diff)
downloadjquery-2bbc3d5860b81e128cd92f865673e10046caac7d.tar.gz
jquery-2bbc3d5860b81e128cd92f865673e10046caac7d.zip
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.
-rw-r--r--src/event.js5
-rw-r--r--test/unit/event.js16
2 files changed, 21 insertions, 0 deletions
diff --git a/src/event.js b/src/event.js
index 4266a1ddb..8a52c60ea 100644
--- a/src/event.js
+++ b/src/event.js
@@ -66,6 +66,11 @@ jQuery.event = {
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 ] || {};
diff --git a/test/unit/event.js b/test/unit/event.js
index 6be4eb8e7..97c29ffef 100644
--- a/test/unit/event.js
+++ b/test/unit/event.js
@@ -555,6 +555,22 @@ test("bind(), multi-namespaced events", function() {
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);