Commit 01f72026 authored by Irae Brasil's avatar Irae Brasil Committed by jeresig

Added support for multiple live event handlers, live hover, and live...

Added support for multiple live event handlers, live hover, and live focus/blur (mapped to focusin/focusout). Fixes #5804, #5801, #5852.
parent b9ca1579
...@@ -838,23 +838,38 @@ jQuery.fn.extend({ ...@@ -838,23 +838,38 @@ jQuery.fn.extend({
hover: function( fnOver, fnOut ) { hover: function( fnOver, fnOut ) {
return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); 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 ) ) { if ( jQuery.isFunction( data ) ) {
fn = data; fn = data;
data = undefined; data = undefined;
} }
types = types.split( /\s+/ );
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 ), { jQuery( this.context ).bind( liveConvert( type, this.selector ), {
data: data, selector: this.selector, live: type data: data, selector: this.selector, live: type
}, fn ); }, fn );
return this; } else {
}, // unbind live handler
die: function( type, fn ) {
jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null ); jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null );
}
}
return this; return this;
} }
}); });
......
...@@ -83,6 +83,7 @@ ...@@ -83,6 +83,7 @@
<td id='radiofocus' class="red">RADIO</td> <td id='radiofocus' class="red">RADIO</td>
<td id='textfocus' class="red">TEXT</td> <td id='textfocus' class="red">TEXT</td>
<td id='textareafocus' class="red">TEXTAREA</td> <td id='textareafocus' class="red">TEXTAREA</td>
<td id='boundFocus' class="red">DOCUMENT</td>
</tr> </tr>
<tr> <tr>
<td>Focusout:</td> <td>Focusout:</td>
...@@ -92,6 +93,25 @@ ...@@ -92,6 +93,25 @@
<td id='radioblur' class="red">RADIO</td> <td id='radioblur' class="red">RADIO</td>
<td id='textblur' class="red">TEXT</td> <td id='textblur' class="red">TEXT</td>
<td id='textareablur' class="red">TEXTAREA</td> <td id='textareablur' class="red">TEXTAREA</td>
<td id='boundBlur' class="red">DOCUMENT</td>
</tr>
<tr>
<td>Live Focus:</td>
<td id='selectlfocus' class="red">SELECT</td>
<td id='mselectlfocus' class="red">MULTI</td>
<td id='checkboxlfocus' class="red">CHECKBOX</td>
<td id='radiolfocus' class="red">RADIO</td>
<td id='textlfocus' class="red">TEXT</td>
<td id='textarealfocus' class="red">TEXTAREA</td>
</tr>
<tr>
<td>Live Blur:</td>
<td id='selectlblur' class="red">SELECT</td>
<td id='mselectlblur' class="red">MULTI</td>
<td id='checkboxlblur' class="red">CHECKBOX</td>
<td id='radiolblur' class="red">RADIO</td>
<td id='textlblur' class="red">TEXT</td>
<td id='textarealblur' class="red">TEXTAREA</td>
</tr> </tr>
</table> </table>
<h2>Submit Tests</h2> <h2>Submit Tests</h2>
...@@ -136,6 +156,12 @@ ...@@ -136,6 +156,12 @@
jQuery(id + "blur").blink(); jQuery(id + "blur").blink();
}); });
this.bind("focus", function(){
jQuery(id + "lfocus").blink();
}).bind("blur", function(){
jQuery(id + "lblur").blink();
});
return this.bind("change", function(e){ return this.bind("change", function(e){
jQuery(id + "bind").blink(); jQuery(id + "bind").blink();
}).live("change", function(e){ }).live("change", function(e){
...@@ -164,6 +190,22 @@ ...@@ -164,6 +190,22 @@
}); });
}; };
$(document).bind("focusin", function() {
jQuery("#boundFocus").blink();
});
$(document).bind("focusout", function() {
jQuery("#boundBlur").blink();
});
$("td.red").live("hover", function(e) {
if ( e.type === "mouseenter" ) {
$(this).css("backgroundColor","green");
} else {
$(this).css("backgroundColor","");
}
});
$(".select_test").addChangeTest("#select"); $(".select_test").addChangeTest("#select");
$(".mselect_test").addChangeTest("#mselect"); $(".mselect_test").addChangeTest("#mselect");
$(".checkbox_test").addChangeTest("#checkbox"); $(".checkbox_test").addChangeTest("#checkbox");
......
...@@ -864,6 +864,20 @@ test(".live()/.die()", function() { ...@@ -864,6 +864,20 @@ test(".live()/.die()", function() {
jQuery("#nothiddendiv div").die("click"); 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(){ test("live with change", function(){
var selectChange = 0, checkboxChange = 0; var selectChange = 0, checkboxChange = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment