aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJörn Zaefferer <joern.zaefferer@gmail.com>2006-12-28 11:37:07 +0000
committerJörn Zaefferer <joern.zaefferer@gmail.com>2006-12-28 11:37:07 +0000
commitb8d46f7b6a38d92d9e0ad0b0df12c773bcf1c634 (patch)
tree4977c724cc9b475e80239e2325a82e497931f10b
parentdef8c734edd6ab2b8188070520ef2019502ffd98 (diff)
downloadjquery-b8d46f7b6a38d92d9e0ad0b0df12c773bcf1c634.tar.gz
jquery-b8d46f7b6a38d92d9e0ad0b0df12c773bcf1c634.zip
Implemented, tested and documented #202
-rw-r--r--src/event/eventTest.js43
-rw-r--r--src/jquery/coreTest.js13
-rw-r--r--src/jquery/jquery.js26
3 files changed, 65 insertions, 17 deletions
diff --git a/src/event/eventTest.js b/src/event/eventTest.js
index b597a2527..13b47dedf 100644
--- a/src/event/eventTest.js
+++ b/src/event/eventTest.js
@@ -8,4 +8,47 @@ test("toggle(Function, Function) - add toggle event and fake a few clicks", func
link = $('#mark');
link.click().toggle(fn1, fn2).click().click().click().click().click();
ok( count == 1, "Check for toggle(fn, fn)" );
+});
+
+test("unbind(event)", function() {
+ expect(3);
+ var el = $("#firstp");
+ el.click(function() {
+ ok( true, "Fake normal bind" );
+ });
+ el.click(function(event) {
+ el.unbind(event);
+ ok( true, "Fake onebind" );
+ });
+ el.click().click();
+});
+
+test("trigger(event, [data]", function() {
+ expect(3);
+ var handler = function(event, a, b, c) {
+ ok( a == 1, "check passed data" );
+ ok( b == "2", "check passed data" );
+ ok( c == "abc", "check passed data" );
+ }
+ $("#firstp").bind("click", handler).trigger("click", [1, "2", "abc"]);
+});
+
+test("bind() with data", function() {
+ expect(2);
+ var handler = function(event) {
+ ok( event.data, "check passed data exists" );
+ ok( event.data.foo == "bar", "Check value of passed data" );
+ }
+ $("#firstp").bind("click", {foo: "bar"}, handler).click();
+});
+
+test("bind() with data and trigger() with data", function() {
+ expect(4);
+ var handler = function(event, data) {
+ ok( event.data, "check passed data exists" );
+ ok( event.data.foo == "bar", "Check value of passed data" );
+ ok( data, "Check trigger data" );
+ ok( data.bar == "foo", "Check value of trigger data" );
+ }
+ $("#firstp").bind("click", {foo: "bar"}, handler).trigger("click", [{bar: "foo"}]);
}); \ No newline at end of file
diff --git a/src/jquery/coreTest.js b/src/jquery/coreTest.js
index 67dea206f..ada71959e 100644
--- a/src/jquery/coreTest.js
+++ b/src/jquery/coreTest.js
@@ -564,16 +564,3 @@ test("removeClass(String) - add three classes and remove again", function() {
test("removeAttr(String", function() {
ok( $('#mark').removeAttr("class")[0].className == "", "remove class" );
});
-
-test("unbind(event)", function() {
- expect(3);
- var el = $("#firstp");
- el.click(function() {
- ok( true, "Fake normal bind" );
- });
- el.click(function(event) {
- el.unbind(event);
- ok( true, "Fake onebind" );
- });
- el.click().click();
-});
diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js
index 4e9f4aca0..7f7ef08d1 100644
--- a/src/jquery/jquery.js
+++ b/src/jquery/jquery.js
@@ -2045,12 +2045,16 @@ jQuery.extend({
// Bind an event to an element
// Original by Dean Edwards
- add: function(element, type, handler) {
+ add: function(element, type, handler, data) {
// For whatever reason, IE has trouble passing the window object
// around, causing it to be cloned in the process
if ( jQuery.browser.msie && element.setInterval != undefined )
element = window;
+ // if data is passed, bind to handler
+ if( data )
+ handler.data = data;
+
// Make sure that the function being executed has a unique ID
if ( !handler.guid )
handler.guid = this.guid++;
@@ -2140,6 +2144,7 @@ jQuery.extend({
// Pass in a reference to the handler function itself
// So that we can later remove it
args[0].handler = c[j];
+ args[0].data = c[j].data;
if ( c[j].apply( this, args ) === false ) {
event.preventDefault();
@@ -2149,7 +2154,7 @@ jQuery.extend({
}
// Clean up added properties in IE to prevent memory leak
- if (jQuery.browser.msie) event.target = event.preventDefault = event.stopPropagation = null;
+ if (jQuery.browser.msie) event.target = event.preventDefault = event.stopPropagation = event.handler = event.data = null;
return returnValue;
},
@@ -3174,12 +3179,24 @@ jQuery.macros = {
* default behaviour. To stop both default action and event bubbling, your handler
* has to return false.
*
+ * In most cases, you can define your event handlers as anonymous functions
+ * (see first example). In cases where that is not possible, you can pass additional
+ * data as the second paramter (and the handler function as the third), see
+ * second example.
+ *
* @example $("p").bind( "click", function() {
* alert( $(this).text() );
* } )
* @before <p>Hello</p>
* @result alert("Hello")
*
+ * @example var handler = function(event) {
+ * alert(event.data.foo);
+ * };
+ * $("p").bind( "click", {foo: "bar"}, handler)
+ * @result alert("bar")
+ * @desc Pass some additional data to the event handler.
+ *
* @example $("form").bind( "submit", function() { return false; } )
* @desc Cancel a default action and prevent it from bubbling by returning false
* from your function.
@@ -3198,11 +3215,12 @@ jQuery.macros = {
* @name bind
* @type jQuery
* @param String type An event type
+ * @param Object data (optional) Additional data passed to the event handler as event.data
* @param Function fn A function to bind to the event on each of the set of matched elements
* @cat Events
*/
- bind: function( type, fn ) {
- jQuery.event.add( this, type, fn );
+ bind: function( type, data, fn ) {
+ jQuery.event.add( this, type, fn || data, data );
},
/**