From be2a339b2beaed69105abae91a118bc1c8669a1b Mon Sep 17 00:00:00 2001 From: Ruslan Yakhyaev Date: Fri, 3 Jan 2014 18:19:32 +0100 Subject: [PATCH] Widget: Support events with dashes and colons Fixes #9708 Closes gh-1159 --- tests/unit/widget/widget_core.js | 19 +++++++++++++++++-- ui/jquery.ui.widget.js | 2 +- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/tests/unit/widget/widget_core.js b/tests/unit/widget/widget_core.js index 3cda48df9..2fdb9bc76 100644 --- a/tests/unit/widget/widget_core.js +++ b/tests/unit/widget/widget_core.js @@ -865,21 +865,36 @@ test( "_on() with delegate to descendent", function() { }); test( "_on() to common element", function() { - expect( 1 ); + expect( 4 ); $.widget( "ui.testWidget", { _create: function() { this._on( this.document, { - "customevent": "_handler" + "customevent": "_handler", + "with:colons": "_colonHandler", + "with-dashes": "_dashHandler", + "with-dashes:and-colons": "_commbinedHandler" }); }, _handler: function() { ok( true, "handler triggered" ); + }, + _colonHandler: function() { + ok( true, "colon handler triggered" ); + }, + _dashHandler: function() { + ok( true, "dash handler triggered" ); + }, + _commbinedHandler: function() { + ok( true, "combined handler triggered" ); } }); var widget = $( "#widget" ).testWidget().testWidget( "instance" ); $( "#widget-wrapper" ).testWidget(); widget.destroy(); $( document ).trigger( "customevent" ); + $( document ).trigger( "with:colons" ); + $( document ).trigger( "with-dashes" ); + $( document ).trigger( "with-dashes:and-colons" ); }); test( "_off() - single event", function() { diff --git a/ui/jquery.ui.widget.js b/ui/jquery.ui.widget.js index 97f5fd7e0..b62b877f7 100644 --- a/ui/jquery.ui.widget.js +++ b/ui/jquery.ui.widget.js @@ -414,7 +414,7 @@ $.Widget.prototype = { handler.guid || handlerProxy.guid || $.guid++; } - var match = event.match( /^(\w+)\s*(.*)$/ ), + var match = event.match( /^([\w:-]*)\s*(.*)$/ ), eventName = match[1] + instance.eventNamespace, selector = match[2]; if ( selector ) {