Added support for map of events in live, die, delegate and undelegate. Fixes #6282.

This commit is contained in:
Robert Katic 2010-03-14 12:34:32 +01:00 committed by jeresig
parent 97b42492bb
commit da5706c974
2 changed files with 47 additions and 0 deletions

View file

@ -944,6 +944,14 @@ jQuery.each(["live", "die"], function( i, name ) {
var type, i = 0, match, namespaces, preType, var type, i = 0, match, namespaces, preType,
selector = origSelector || this.selector, selector = origSelector || this.selector,
context = origSelector ? this : jQuery( this.context ); context = origSelector ? this : jQuery( this.context );
if ( typeof types === "object" && !types.preventDefault ) {
for ( var key in types ) {
context[ name ]( key, data, types[key], selector );
}
return this;
}
if ( jQuery.isFunction( data ) ) { if ( jQuery.isFunction( data ) ) {
fn = data; fn = data;

View file

@ -206,6 +206,45 @@ test("bind/one/unbind(Object)", function(){
equals( mouseoverCounter, 4, "bind(Object)" ); equals( mouseoverCounter, 4, "bind(Object)" );
}); });
test("live/die(Object), delegate/undelegate(String, Object)", function() {
expect(6);
var clickCounter = 0, mouseoverCounter = 0,
$p = jQuery("#firstp"), $a = $p.find("a");
var events = {
click: function( event ) {
clickCounter += ( event.data || 1 );
},
mouseover: function( event ) {
mouseoverCounter += ( event.data || 1 );
}
};
function trigger() {
$a.trigger("click").trigger("mouseover");
}
$a.live( events );
$p.delegate( "a", events, 2 );
trigger();
equals( clickCounter, 3, "live/delegate(Object)" );
equals( mouseoverCounter, 3, "live/delegate(Object)" );
$p.undelegate( "a", events );
trigger();
equals( clickCounter, 4, "undelegate(Object)" );
equals( mouseoverCounter, 4, "undelegate(Object)" );
$a.die( events );
trigger();
equals( clickCounter, 4, "die(Object)" );
equals( mouseoverCounter, 4, "die(Object)" );
});
test("bind(), iframes", function() { test("bind(), iframes", function() {
// events don't work with iframes, see #939 - this test fails in IE because of contentDocument // events don't work with iframes, see #939 - this test fails in IE because of contentDocument
var doc = jQuery("#loadediframe").contents(); var doc = jQuery("#loadediframe").contents();