From 4f7441910f664800cca8d252f04ec479518edfe0 Mon Sep 17 00:00:00 2001 From: John Resig Date: Tue, 30 Dec 2008 20:45:33 +0000 Subject: [PATCH] Made sure that return false works in .live() along with the event object being passed in as the first argument. --- src/event.js | 10 +++++++--- test/unit/event.js | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/event.js b/src/event.js index 74bc1df..0710b7b 100644 --- a/src/event.js +++ b/src/event.js @@ -551,14 +551,18 @@ jQuery.fn.extend({ }); function liveHandler( event ){ - var check = RegExp("(^|\\.)" + event.type + "(\\.|$)"); + var check = RegExp("(^|\\.)" + event.type + "(\\.|$)"), stop = true; jQuery.each(jQuery.data(this, "events").live || [], function(i, fn){ if ( check.test(fn.type) ) { var elem = jQuery(event.target).closest(fn.data)[0]; - if ( elem ) - jQuery.event.trigger( event.type, fn.data, elem, false, fn, false ); + if ( elem ) { + var ret = jQuery.event.trigger( event.type, [event, fn.data], elem, false, fn, false ); + if ( ret === false ) + stop = false; + } } }); + return stop; } function liveConvert(type, selector){ diff --git a/test/unit/event.js b/test/unit/event.js index fd91819..e80774f 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -439,7 +439,7 @@ test("toggle(Function, Function, ...)", function() { }); test(".live()/.die()", function() { - expect(28); + expect(30); var submit = 0, div = 0, livea = 0, liveb = 0; @@ -501,6 +501,20 @@ test(".live()/.die()", function() { 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"); }); /* -- 1.7.10.4