equals( mouseoverCounter, 0, "unbind() with multiple events at once" );
});
-test("trigger(event, [data], [fn])", function() {
- expect(67);
+test("trigger(type, [data], [fn])", function() {
+ expect(11);
var handler = function(event, a, b, c) {
equals( event.type, "click", "check passed data" );
return "test";
};
- var handler2 = function(a, b, c) {
- equals( a, 1, "check passed data" );
- equals( b, "2", "check passed data" );
- equals( c, "abc", "check passed data" );
- return false;
- };
-
- var handler3 = function(a, b, c, v) {
- equals( a, 1, "check passed data" );
- equals( b, "2", "check passed data" );
- equals( c, "abc", "check passed data" );
- equals( v, "test", "check current value" );
- return "newVal";
- };
-
- var handler4 = function(a, b, c, v) {
- equals( a, 1, "check passed data" );
- equals( b, "2", "check passed data" );
- equals( c, "abc", "check passed data" );
- equals( v, "test", "check current value" );
- };
+ var $elem = jQuery("#firstp");
// Simulate a "native" click
- jQuery("#firstp")[0].click = function(){
+ $elem[0].click = function(){
ok( true, "Native call was triggered" );
};
// Triggers handlrs and native
// Trigger 5
- jQuery("#firstp").bind("click", handler).trigger("click", [1, "2", "abc"]);
-
- // Triggers handlers, native, and extra fn
- // Triggers 9
- jQuery("#firstp").trigger("click", [1, "2", "abc"], handler4);
+ $elem.bind("click", handler).trigger("click", [1, "2", "abc"]);
// Simulate a "native" click
- jQuery("#firstp")[0].click = function(){
+ $elem[0].click = function(){
ok( false, "Native call was triggered" );
};
- // Triggers handlers, native, and extra fn
- // Triggers 7
- jQuery("#firstp").trigger("click", [1, "2", "abc"], handler2);
-
// Trigger only the handlers (no native)
// Triggers 5
- equals( jQuery("#firstp").triggerHandler("click", [1, "2", "abc"]), "test", "Verify handler response" );
-
- // Trigger only the handlers (no native) and extra fn
- // Triggers 8
- equals( jQuery("#firstp").triggerHandler("click", [1, "2", "abc"], handler2), false, "Verify handler response" );
-
- // Build fake click event to pass in
- var eventObj = jQuery.event.fix({ type: "foo", target: document.body });
-
- // Trigger only the handlers (no native), with external event obj
- // Triggers 5
- equals( jQuery("#firstp").triggerHandler("click", [eventObj, 1, "2", "abc"]), "test", "Verify handler response" );
+ equals( $elem.triggerHandler("click", [1, "2", "abc"]), "test", "Verify handler response" );
- // Trigger only the handlers (no native) and extra fn, with external event obj
- // Triggers 9
- eventObj = jQuery.event.fix({ type: "foo", target: document.body });
- equals( jQuery("#firstp").triggerHandler("click", [eventObj, 1, "2", "abc"], handler), "test", "Verify handler response" );
-
var pass = true;
try {
- jQuery('#form input:first')
- .hide()
- .trigger('focus');
+ jQuery('#form input:first').hide().trigger('focus');
} catch(e) {
pass = false;
}
ok( pass, "Trigger focus on hidden element" );
+});
- // have the extra handler override the return
- // Triggers 9
- equals( jQuery("#firstp").triggerHandler("click", [1, "2", "abc"], handler3), "newVal", "Verify triggerHandler return is overwritten by extra function" );
+test("trigger(eventObject, [data], [fn])", function() {
+ expect(25);
+
+ var $parent = jQuery('<div id="par" />').hide().appendTo('body'),
+ $child = jQuery('<p id="child">foo</p>').appendTo( $parent );
+
+ var event = jQuery.Event("noNew");
+ ok( event != window, "Instantiate jQuery.Event without the 'new' keyword" );
+ equals( event.type, "noNew", "Verify its type" );
+
+ equals( event.isDefaultPrevented(), false, "Verify isDefaultPrevented" );
+ equals( event.isPropagationStopped(), false, "Verify isPropagationStopped" );
+ equals( event.isImmediatePropagationStopped(), false, "Verify isImmediatePropagationStopped" );
+
+ event.preventDefault();
+ equals( event.isDefaultPrevented(), true, "Verify isDefaultPrevented" );
+ event.stopPropagation();
+ equals( event.isPropagationStopped(), true, "Verify isPropagationStopped" );
+
+ event.isPropagationStopped = function(){ return false };
+ event.stopImmediatePropagation();
+ equals( event.isPropagationStopped(), true, "Verify isPropagationStopped" );
+ equals( event.isImmediatePropagationStopped(), true, "Verify isPropagationStopped" );
+
+ $parent.bind('foo',function(e){
+ // Tries bubbling
+ equals( e.type, 'foo', 'Verify event type when passed passing an event object' );
+ equals( e.target.id, 'child', 'Verify event.target when passed passing an event object' );
+ equals( e.currentTarget.id, 'par', 'Verify event.target when passed passing an event object' );
+ equals( e.secret, 'boo!', 'Verify event object\'s custom attribute when passed passing an event object' );
+ });
+
+ // test with an event object
+ event = new jQuery.Event("foo");
+ event.secret = 'boo!';
+ $child.trigger(event);
+
+ // test with a literal object
+ $child.trigger({type:'foo', secret:'boo!'});
+
+ $parent.unbind();
- // have the extra handler leave the return value alone
- // Triggers 9
- equals( jQuery("#firstp").triggerHandler("click", [1, "2", "abc"], handler4), "test", "Verify triggerHandler return is not overwritten by extra function" );
+ function error(){
+ ok( false, "This assertion shouldn't be reached");
+ }
+
+ $parent.bind('foo', error );
+
+ $child.bind('foo',function(e, a, b, c ){
+ equals( arguments.length, 4, "Check arguments length");
+ equals( a, 1, "Check first custom argument");
+ equals( b, 2, "Check second custom argument");
+ equals( c, 3, "Check third custom argument");
+
+ equals( e.isDefaultPrevented(), false, "Verify isDefaultPrevented" );
+ equals( e.isPropagationStopped(), false, "Verify isPropagationStopped" );
+ equals( e.isImmediatePropagationStopped(), false, "Verify isImmediatePropagationStopped" );
+
+ // Skips both errors
+ e.stopImmediatePropagation();
+
+ return "result";
+ });
+
+ $child.bind('foo', error );
+
+ event = new jQuery.Event("foo");
+ $child.trigger( event, [1,2,3] ).unbind();
+ equals( event.result, "result", "Check event.result attribute");
+
+ // Will error if it bubbles
+ $child.triggerHandler('foo');
+
+ $child.unbind();
+ $parent.unbind().remove();
});
test("toggle(Function, Function, ...)", function() {
});
test(".live()/.die()", function() {
- expect(28);
+ expect(30);
var submit = 0, div = 0, livea = 0, liveb = 0;
jQuery("div#nothiddendiv").die("click");
jQuery("div").die("click");
jQuery("div").die("submit");
+
+ // Verify that return false prevents default action
+ jQuery("#anchor2").live("click", function(){ return false; });
+ var hash = window.location.hash;
+ jQuery("#anchor2").trigger("click");
+ equals( window.location.hash, hash, "return false worked" );
+ jQuery("#anchor2").die("click");
+
+ // Verify that .preventDefault() prevents default action
+ jQuery("#anchor2").live("click", function(e){ e.preventDefault(); });
+ var hash = window.location.hash;
+ jQuery("#anchor2").trigger("click");
+ equals( window.location.hash, hash, "e.preventDefault() worked" );
+ jQuery("#anchor2").die("click");
});
/*