hover: function( fnOver, fnOut ) {
return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- },
+ }
+});
+
+jQuery.each(["live", "die"], function( i, name ) {
+ jQuery.fn[ name ] = function( types, data, fn ) {
+ var type, i = 0;
- live: function( type, data, fn ) {
if ( jQuery.isFunction( data ) ) {
fn = data;
data = undefined;
}
- jQuery( this.context ).bind( liveConvert( type, this.selector ), {
- data: data, selector: this.selector, live: type
- }, fn );
+ types = types.split( /\s+/ );
- return this;
- },
+ while ( (type = types[ i++ ]) ) {
+ type = type === "focus" ? "focusin" : // focus --> focusin
+ type === "blur" ? "focusout" : // blur --> focusout
+ type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support
+ type;
+
+ if ( name === "live" ) {
+ // bind live handler
+ jQuery( this.context ).bind( liveConvert( type, this.selector ), {
+ data: data, selector: this.selector, live: type
+ }, fn );
- die: function( type, fn ) {
- jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null );
+ } else {
+ // unbind live handler
+ jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null );
+ }
+ }
+
return this;
}
});
<td id='radiofocus' class="red">RADIO</td>\r
<td id='textfocus' class="red">TEXT</td>\r
<td id='textareafocus' class="red">TEXTAREA</td>\r
+ <td id='boundFocus' class="red">DOCUMENT</td>\r
</tr>\r
<tr>\r
<td>Focusout:</td>\r
<td id='radioblur' class="red">RADIO</td>\r
<td id='textblur' class="red">TEXT</td>\r
<td id='textareablur' class="red">TEXTAREA</td>\r
+ <td id='boundBlur' class="red">DOCUMENT</td>\r
+ </tr>\r
+ <tr>\r
+ <td>Live Focus:</td>\r
+ <td id='selectlfocus' class="red">SELECT</td>\r
+ <td id='mselectlfocus' class="red">MULTI</td>\r
+ <td id='checkboxlfocus' class="red">CHECKBOX</td>\r
+ <td id='radiolfocus' class="red">RADIO</td>\r
+ <td id='textlfocus' class="red">TEXT</td>\r
+ <td id='textarealfocus' class="red">TEXTAREA</td>\r
+ </tr>\r
+ <tr>\r
+ <td>Live Blur:</td>\r
+ <td id='selectlblur' class="red">SELECT</td>\r
+ <td id='mselectlblur' class="red">MULTI</td>\r
+ <td id='checkboxlblur' class="red">CHECKBOX</td>\r
+ <td id='radiolblur' class="red">RADIO</td>\r
+ <td id='textlblur' class="red">TEXT</td>\r
+ <td id='textarealblur' class="red">TEXTAREA</td>\r
</tr>\r
</table>\r
<h2>Submit Tests</h2>\r
jQuery(id + "blur").blink();\r
});\r
\r
+ this.bind("focus", function(){\r
+ jQuery(id + "lfocus").blink();\r
+ }).bind("blur", function(){\r
+ jQuery(id + "lblur").blink();\r
+ });\r
+\r
return this.bind("change", function(e){\r
jQuery(id + "bind").blink();\r
}).live("change", function(e){\r
next();\r
});\r
};\r
+\r
+ $(document).bind("focusin", function() {\r
+ jQuery("#boundFocus").blink();\r
+ });\r
\r
+ $(document).bind("focusout", function() {\r
+ jQuery("#boundBlur").blink();\r
+ });\r
+\r
+ $("td.red").live("hover", function(e) {\r
+ if ( e.type === "mouseenter" ) {\r
+ $(this).css("backgroundColor","green");\r
+ } else {\r
+ $(this).css("backgroundColor","");\r
+ }\r
+ });\r
+\r
$(".select_test").addChangeTest("#select");\r
$(".mselect_test").addChangeTest("#mselect");\r
$(".checkbox_test").addChangeTest("#checkbox");\r
jQuery("#nothiddendiv div").die("click");
});
+test("live with multiple events", function(){
+ expect(1);
+
+ var count = 0;
+ var div = jQuery("div#nothiddendivchild")
+
+ div.live("click submit", function(){ count++; });
+
+ div.trigger("click");
+ div.trigger("submit");
+
+ equals( count, 2, "Make sure both the click and submit were triggered." );
+});
+
test("live with change", function(){
var selectChange = 0, checkboxChange = 0;