Fix #12656. Make event shorthands excludable.

This commit is contained in:
Dave Methvin 2013-01-26 23:48:59 -05:00
parent 3f9f2b1dbc
commit 24e7624554
7 changed files with 178 additions and 167 deletions

View File

@ -45,6 +45,7 @@ module.exports = function( grunt ) {
{ flag: "css", src: "src/css.js" },
"src/serialize.js",
{ flag: "event-alias", src: "src/event-alias.js" },
{ flag: "ajax", src: "src/ajax.js" },
{ flag: "ajax/script", src: "src/ajax/script.js", needs: ["ajax"] },
{ flag: "ajax/jsonp", src: "src/ajax/jsonp.js", needs: [ "ajax", "ajax/script" ] },

15
src/event-alias.js Normal file
View File

@ -0,0 +1,15 @@
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
// Handle event binding
jQuery.fn[ name ] = function( data, fn ) {
return arguments.length > 0 ?
this.on( name, null, data, fn ) :
this.trigger( name );
};
});
jQuery.fn.hover = function( fnOver, fnOut ) {
return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
};

View File

@ -450,10 +450,18 @@ jQuery.event = {
}
// Create a writable copy of the event object and normalize some properties
var i, prop,
var i, prop, copy,
type = event.type,
originalEvent = event,
fixHook = jQuery.event.fixHooks[ event.type ] || {},
copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
fixHook = this.fixHooks[ type ];
if ( !fixHook ) {
this.fixHooks[ type ] = fixHook =
rmouseEvent.test( type ) ? this.mouseHooks :
rkeyEvent.test( type ) ? this.keyHooks :
{};
}
copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
event = new jQuery.Event( originalEvent );
@ -980,29 +988,5 @@ jQuery.fn.extend({
if ( elem ) {
return jQuery.event.trigger( type, data, elem, true );
}
},
hover: function( fnOver, fnOut ) {
return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
}
});
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
// Handle event binding
jQuery.fn[ name ] = function( data, fn ) {
return arguments.length > 0 ?
this.on( name, null, data, fn ) :
this.trigger( name );
};
if ( rkeyEvent.test( name ) ) {
jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
}
if ( rmouseEvent.test( name ) ) {
jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
}
});

View File

@ -316,7 +316,7 @@ test( "attr(String, Object)", function() {
equal( $input.attr("checked"), "checked", "Set checked to 'checked' (verified by .attr)" );
var $radios = jQuery("#checkedtest").find("input[type='radio']");
$radios.eq( 1 ).click();
$radios.eq( 1 ).trigger("click");
equal( $radios.eq( 1 ).prop("checked"), true, "Second radio was checked when clicked" );
equal( $radios.eq( 0 ).attr("checked"), "checked", "First radio is still [checked]" );

View File

@ -34,9 +34,8 @@ test("jQuery()", function() {
div = jQuery("<div/><hr/><code/><b/>"),
exec = false,
lng = "",
expected = 22,
expected = 21,
attrObj = {
"click": function() { ok( exec, "Click executed." ); },
"text": "test",
"class": "test2",
"id": "test3"
@ -44,6 +43,10 @@ test("jQuery()", function() {
// The $(html, props) signature can stealth-call any $.fn method, check for a
// few here but beware of modular builds where these methods may be excluded.
if ( jQuery.fn.click ) {
expected++;
attrObj["click"] = function() { ok( exec, "Click executed." ); };
}
if ( jQuery.fn.width ) {
expected++;
attrObj["width"] = 10;
@ -133,7 +136,7 @@ test("jQuery()", function() {
equal( elem[0].id, "test3", "jQuery() quick setter id");
exec = true;
elem.click();
elem.trigger("click");
// manually clean up detached elements
elem.remove();

View File

@ -4,12 +4,12 @@ test("null or undefined handler", function() {
expect(2);
// Supports Fixes bug #7229
try {
jQuery("#firstp").click(null);
jQuery("#firstp").on( "click", null );
ok(true, "Passing a null handler will not throw an exception");
} catch (e) {}
try {
jQuery("#firstp").click(undefined);
jQuery("#firstp").on( "click", undefined );
ok(true, "Passing an undefined handler will not throw an exception");
} catch (e) {}
});
@ -66,7 +66,7 @@ test("bind(), with data", function() {
ok( event.data, "bind() with data, check passed data exists" );
equal( event.data["foo"], "bar", "bind() with data, Check value of passed data" );
};
jQuery("#firstp").bind("click", {"foo": "bar"}, handler).click().unbind("click", handler);
jQuery("#firstp").bind("click", {"foo": "bar"}, handler).trigger("click").unbind("click", handler);
ok( !jQuery._data(jQuery("#firstp")[0], "events"), "Event handler unbound when using data." );
@ -74,7 +74,7 @@ test("bind(), with data", function() {
var handler2 = function(event) {
equal( event.data, test, "bind() with function data, Check value of passed data" );
};
jQuery("#firstp").bind("click", test, handler2).click().unbind("click", handler2);
jQuery("#firstp").bind("click", test, handler2).trigger("click").unbind("click", handler2);
});
test("click(), with data", function() {
@ -83,7 +83,7 @@ test("click(), with data", function() {
ok( event.data, "bind() with data, check passed data exists" );
equal( event.data["foo"], "bar", "bind() with data, Check value of passed data" );
};
jQuery("#firstp").click({"foo": "bar"}, handler).click().unbind("click", handler);
jQuery("#firstp").on( "click", {"foo": "bar"}, handler).trigger("click").unbind("click", handler);
ok( !jQuery._data(jQuery("#firstp")[0], "events"), "Event handler unbound when using data." );
});
@ -391,7 +391,7 @@ test("bind/delegate bubbling, isDefaultPrevented", function() {
$jq[0].click(); // IE
}
};
$anchor2.click(function(e) {
$anchor2.on( "click", function(e) {
e.preventDefault();
});
$main.delegate("#foo", "click", function(e) {
@ -408,7 +408,7 @@ test("bind/delegate bubbling, isDefaultPrevented", function() {
fakeClick( $anchor2 );
$anchor2.unbind( "click" );
$main.undelegate( "click" );
$anchor2.click(function(e) {
$anchor2.on( "click", function(e) {
// Let the default action occur
});
$main.delegate("#foo", "click", function(e) {
@ -427,7 +427,7 @@ test("bind(), iframes", function() {
jQuery("div", doc).bind("click", function() {
ok( true, "Binding to element inside iframe" );
}).click().unbind("click");
}).trigger("click").unbind("click");
});
test("bind(), trigger change on select", function() {
@ -489,7 +489,7 @@ test("bind(), namespaced events, cloned events", 18, function() {
}).trigger("tester");
// Make sure events stick with appendTo'd elements (which are cloned) #2027
jQuery("<a href='#fail' class='test'>test</a>").click(function(){ return false; }).appendTo("#qunit-fixture");
jQuery("<a href='#fail' class='test'>test</a>").on( "click", function(){ return false; }).appendTo("#qunit-fixture");
ok( jQuery("a.test:first").triggerHandler("click") === false, "Handler is bound to appendTo'd elements" );
});
@ -603,8 +603,8 @@ test("bind(), with different this object", function() {
};
jQuery("#firstp")
.bind("click", jQuery.proxy(handler1, thisObject)).click().unbind("click", handler1)
.bind("click", data, jQuery.proxy(handler2, thisObject)).click().unbind("click", handler2);
.bind("click", jQuery.proxy(handler1, thisObject)).trigger("click").unbind("click", handler1)
.bind("click", data, jQuery.proxy(handler2, thisObject)).trigger("click").unbind("click", handler2);
ok( !jQuery._data(jQuery("#firstp")[0], "events"), "Event handler unbound when using different this object and data." );
});
@ -738,7 +738,7 @@ test("unbind(type)", function() {
jQuery( document )
.bind( "click", func )
.unbind( "click", func )
.click()
.trigger("click")
.unbind( "click" );
});
@ -778,33 +778,35 @@ test("unbind(eventObject)", function() {
assert( 0 );
});
test("hover() mouseenter mouseleave", function() {
expect(1);
if ( jQuery.fn.hover ) {
test("hover() mouseenter mouseleave", function() {
expect(1);
var times = 0,
handler1 = function( event ) { ++times; },
handler2 = function( event ) { ++times; };
var times = 0,
handler1 = function( event ) { ++times; },
handler2 = function( event ) { ++times; };
jQuery("#firstp")
.hover(handler1, handler2)
.mouseenter().mouseleave()
.unbind("mouseenter", handler1)
.unbind("mouseleave", handler2)
.hover(handler1)
.mouseenter().mouseleave()
.unbind("mouseenter mouseleave", handler1)
.mouseenter().mouseleave();
jQuery("#firstp")
.hover(handler1, handler2)
.mouseenter().mouseleave()
.unbind("mouseenter", handler1)
.unbind("mouseleave", handler2)
.hover(handler1)
.mouseenter().mouseleave()
.unbind("mouseenter mouseleave", handler1)
.mouseenter().mouseleave();
equal( times, 4, "hover handlers fired" );
equal( times, 4, "hover handlers fired" );
});
});
}
test("mouseover triggers mouseenter", function() {
expect(1);
var count = 0,
elem = jQuery("<a />");
elem.mouseenter(function () {
elem.on( "mouseenter", function () {
count++;
});
elem.trigger("mouseover");
@ -835,65 +837,71 @@ test("withinElement implemented with jQuery.contains()", function() {
test("mouseenter, mouseleave don't catch exceptions", function() {
expect(2);
var elem = jQuery("#firstp").hover(function() { throw "an Exception"; });
var elem = jQuery("#firstp").on( "mouseenter mouseleave", function() {
throw "an Exception";
});
try {
elem.mouseenter();
elem.trigger("mouseenter");
} catch (e) {
equal( e, "an Exception", "mouseenter doesn't catch exceptions" );
}
try {
elem.mouseleave();
elem.trigger("mouseleave");
} catch (e) {
equal( e, "an Exception", "mouseleave doesn't catch exceptions" );
}
});
test("trigger() shortcuts", function() {
expect(6);
if ( jQuery.fn.click ) {
var elem = jQuery("<li><a href='#'>Change location</a></li>").prependTo("#firstUL");
elem.find("a").bind("click", function() {
var close = jQuery("spanx", this); // same with jQuery(this).find("span");
equal( close.length, 0, "Context element does not exist, length must be zero" );
ok( !close[0], "Context element does not exist, direct access to element must return undefined" );
return false;
}).click();
test("trigger() shortcuts", function() {
expect(6);
// manually clean up detached elements
elem.remove();
var elem = jQuery("<li><a href='#'>Change location</a></li>").prependTo("#firstUL");
elem.find("a").bind("click", function() {
var close = jQuery("spanx", this); // same with jQuery(this).find("span");
equal( close.length, 0, "Context element does not exist, length must be zero" );
ok( !close[0], "Context element does not exist, direct access to element must return undefined" );
return false;
}).click();
jQuery("#check1").click(function() {
ok( true, "click event handler for checkbox gets fired twice, see #815" );
}).click();
// manually clean up detached elements
elem.remove();
var counter = 0;
jQuery("#firstp")[0].onclick = function(event) {
counter++;
};
jQuery("#firstp").click();
equal( counter, 1, "Check that click, triggers onclick event handler also" );
jQuery("#check1").click(function() {
ok( true, "click event handler for checkbox gets fired twice, see #815" );
}).click();
var clickCounter = 0;
jQuery("#simon1")[0].onclick = function(event) {
clickCounter++;
};
jQuery("#simon1").click();
equal( clickCounter, 1, "Check that click, triggers onclick event handler on an a tag also" );
var counter = 0;
jQuery("#firstp")[0].onclick = function(event) {
counter++;
};
jQuery("#firstp").click();
equal( counter, 1, "Check that click, triggers onclick event handler also" );
elem = jQuery("<img />").load(function(){
ok( true, "Trigger the load event, using the shortcut .load() (#2819)");
}).load();
var clickCounter = 0;
jQuery("#simon1")[0].onclick = function(event) {
clickCounter++;
};
jQuery("#simon1").click();
equal( clickCounter, 1, "Check that click, triggers onclick event handler on an a tag also" );
// manually clean up detached elements
elem.remove();
elem = jQuery("<img />").load(function(){
ok( true, "Trigger the load event, using the shortcut .load() (#2819)");
}).load();
// test that special handlers do not blow up with VML elements (#7071)
jQuery("<xml:namespace ns='urn:schemas-microsoft-com:vml' prefix='v' />").appendTo("head");
jQuery("<v:oval id='oval' style='width:100pt;height:75pt;' fillcolor='red'> </v:oval>").appendTo("#form");
jQuery("#oval").click().keydown();
});
// manually clean up detached elements
elem.remove();
// test that special handlers do not blow up with VML elements (#7071)
jQuery("<xml:namespace ns='urn:schemas-microsoft-com:vml' prefix='v' />").appendTo("head");
jQuery("<v:oval id='oval' style='width:100pt;height:75pt;' fillcolor='red'> </v:oval>").appendTo("#form");
jQuery("#oval").click().keydown();
});
}
test("trigger() bubbling", function() {
expect(18);
@ -1007,7 +1015,7 @@ test("trigger(type, [data], [fn])", function() {
var form = jQuery("<form action=''></form>").appendTo("body");
// Make sure it can be prevented locally
form.submit(function(){
form.on( "submit", function(){
ok( true, "Local bind still works." );
return false;
});
@ -1017,7 +1025,7 @@ test("trigger(type, [data], [fn])", function() {
form.unbind("submit");
jQuery(document).submit(function(){
jQuery(document).on( "submit", function(){
ok( true, "Make sure bubble works up to document." );
return false;
});
@ -1050,7 +1058,7 @@ test( "submit event bubbles on copied forms (#11649)", function() {
$fixture.on( "submit", "form", delegatedSubmit );
// Trigger form submission to introduce the _submit_attached property
$testForm.on( "submit", noSubmit ).find("input[name=sub1]").click();
$testForm.on( "submit", noSubmit ).find("input[name=sub1]").trigger("click");
// Copy the form via .clone() and .html()
$formByClone = $testForm.clone( true, true ).removeAttr("id");
@ -1058,7 +1066,7 @@ test( "submit event bubbles on copied forms (#11649)", function() {
$wrapperDiv.append( $formByClone, $formByHTML );
// Check submit bubbling on the copied forms
$wrapperDiv.find("form").on( "submit", noSubmit ).find("input[name=sub1]").click();
$wrapperDiv.find("form").on( "submit", noSubmit ).find("input[name=sub1]").trigger("click");
// Clean up
$wrapperDiv.remove();
@ -1083,7 +1091,7 @@ test( "change event bubbles on copied forms (#11796)", function(){
$fixture.on( "change", "form", delegatedChange );
// Trigger change event to introduce the _change_attached property
$form.find("select[name=select1]").val("1").change();
$form.find("select[name=select1]").val("1").trigger("change");
// Copy the form via .clone() and .html()
$formByClone = $form.clone( true, true ).removeAttr("id");
@ -1091,7 +1099,7 @@ test( "change event bubbles on copied forms (#11796)", function(){
$wrapperDiv.append( $formByClone, $formByHTML );
// Check change bubbling on the copied forms
$wrapperDiv.find("form select[name=select1]").val("2").change();
$wrapperDiv.find("form select[name=select1]").val("2").trigger("change");
// Clean up
$wrapperDiv.remove();
@ -1203,7 +1211,7 @@ test(".trigger() bubbling on disconnected elements (#10489)", function() {
.on( "click", function() {
ok( true, "click fired on p" );
})
.click()
.trigger("click")
.off( "click" )
.end()
.off( "click" )
@ -1470,7 +1478,7 @@ test("jQuery.Event.currentTarget", function(){
.on( "click", function( e ){
equal( e.currentTarget, this, "Check currentTarget on event" );
})
.click()
.trigger("click")
.off( "click" )
.end()
.off( "click" );
@ -1666,7 +1674,7 @@ test(".delegate()/.undelegate()", function() {
jQuery("#body").delegate("#nothiddendivchild", "click", function(e){ jQuery("#nothiddendivchild").html(""); });
jQuery("#body").delegate("#nothiddendivchild", "click", function(e){ if(e.target) {livec++;} });
jQuery("#nothiddendiv span").click();
jQuery("#nothiddendiv span").trigger("click");
equal( jQuery("#nothiddendiv span").length, 0, "Verify that first handler occurred and modified the DOM." );
equal( livec, 1, "Verify that second handler occurred even with nuked target." );
@ -1681,7 +1689,7 @@ test(".delegate()/.undelegate()", function() {
jQuery("#body").delegate("span#liveSpan1 a", "click", function(){ lived++; return false; });
jQuery("#body").delegate("span#liveSpan1", "click", function(){ livee++; });
jQuery("span#liveSpan1 a").click();
jQuery("span#liveSpan1 a").trigger("click");
equal( lived, 1, "Verify that only one first handler occurred." );
equal( livee, 0, "Verify that second handler doesn't." );
@ -1691,7 +1699,7 @@ test(".delegate()/.undelegate()", function() {
lived = 0;
livee = 0;
jQuery("span#liveSpan2 a").click();
jQuery("span#liveSpan2 a").trigger("click");
equal( lived, 1, "Verify that only one first handler occurred." );
equal( livee, 0, "Verify that second handler doesn't." );
@ -1706,7 +1714,7 @@ test(".delegate()/.undelegate()", function() {
equal( e.target.nodeName.toUpperCase(), "A", "Check the event.target within a delegate handler" );
});
jQuery("span#liveSpan1 a").click();
jQuery("span#liveSpan1 a").trigger("click");
jQuery("#body").undelegate("span#liveSpan1", "click");
@ -1758,7 +1766,7 @@ test("jQuery.off using dispatched jQuery.Event", function() {
equal( ++count, 1, "event called once before removal" );
jQuery().off( event );
})
.find("a").click().click().end()
.find("a").trigger("click").trigger("click").end()
.remove();
});
@ -1776,7 +1784,7 @@ test( "delegated event with delegateTarget-relative selector", function() {
ok( this.id === "a0_0" , "first li under #u10 was clicked" );
})
.end()
.find("a").click().end()
.find("a").trigger("click").end()
.find("#ul0").off();
// Non-positional selector (#12383)
@ -1792,7 +1800,7 @@ test( "delegated event with delegateTarget-relative selector", function() {
.on( "click", "li.test a", function() {
ok( true, "li.test is below the delegation point." );
})
.find("#a0_0").click();
.find("#a0_0").trigger("click");
markup.remove();
});
@ -1834,7 +1842,7 @@ test("stopPropagation() stops directly-bound events on delegated target", functi
e.stopPropagation();
ok( true, "delegated handler was called" );
})
.find("a").click().end()
.find("a").trigger("click").end()
.remove();
});
@ -1970,7 +1978,7 @@ test("delegate with submit", function() {
ev.preventDefault();
});
jQuery("#testForm input[name=sub1]").submit();
jQuery("#testForm input[name=sub1]").trigger("submit");
equal( count1, 1, "Verify form submit." );
equal( count2, 1, "Verify body submit." );
@ -2015,24 +2023,24 @@ test("inline handler returning false stops default", function() {
expect(1);
var markup = jQuery("<div><a href=\"#\" onclick=\"return false\">x</a></div>");
markup.click(function(e) {
markup.on( "click", function(e) {
ok( e.isDefaultPrevented(), "inline handler prevented default");
return false;
});
markup.find("a").click();
markup.find("a").trigger("click");
markup.off("click");
});
test("window resize", function() {
expect(2);
jQuery(window).unbind();
jQuery(window).off();
jQuery(window).bind("resize", function(){
jQuery(window).on( "resize", function(){
ok( true, "Resize event fired." );
}).resize().unbind("resize");
}).trigger("resize").off("resize");
ok( !jQuery._data(window, "__events__"), "Make sure all the events are gone." );
ok( !jQuery._data(window, "events"), "Make sure all the events are gone." );
});
test("focusin bubbles", function() {
@ -2106,7 +2114,7 @@ test(".on and .off", function() {
.one( "click", 7, function( e, trig ) {
counter += e.data + (trig || 11); // once, 7+11=18
})
.click()
.trigger("click")
.trigger( "click", 17 )
.off( "click" );
equal( counter, 54, "direct event bindings with data" );
@ -2121,7 +2129,7 @@ test(".on and .off", function() {
counter += e.data + (trig || 11); // once, 7+11=18
})
.find("em")
.click()
.trigger("click")
.trigger( "click", 17 )
.end()
.off( "click", "em" );
@ -2306,7 +2314,7 @@ test("clone() delegated events (#11076)", function() {
.on( "click", "td:last-child", clicked ),
clone = table.clone( true );
clone.find("td").click();
clone.find("td").trigger("click");
equal( counter["center"], 1, "first child" );
equal( counter["fold"], 1, "last child" );
equal( counter["centerfold"], 2, "all children" );
@ -2337,7 +2345,7 @@ test("checkbox state (#3827)", function() {
// jQuery click
cb.checked = true;
equal( cb.checked, true, "jQuery - checkbox is initially checked" );
jQuery( cb ).click();
jQuery( cb ).trigger("click");
equal( cb.checked, false, "jQuery - checkbox is no longer checked" );
// Handlers only; checkbox state remains false
@ -2348,7 +2356,7 @@ test("focus-blur order (#12868)", function() {
expect( 5 );
var $text = jQuery("#text1"),
$radio = jQuery("#radio1").focus(),
$radio = jQuery("#radio1").trigger("focus"),
order;
// IE6-10 fire focus/blur events asynchronously; this is the resulting mess.
@ -2376,7 +2384,7 @@ test("focus-blur order (#12868)", function() {
// Enabled input getting focus
order = 0;
equal( document.activeElement, $radio[0], "radio has focus" );
$text.focus();
$text.trigger("focus");
setTimeout( function() {
equal( document.activeElement, $text[0], "text has focus" );
@ -2612,7 +2620,7 @@ test( "make sure events cloned correctly", 18, function() {
ok( true, "Change on original child element is fired" );
});
fixture.clone().click().change(); // 0 events should be fired
fixture.clone().trigger("click").trigger("change"); // 0 events should be fired
clone = fixture.clone( true );
@ -2628,15 +2636,15 @@ test( "make sure events cloned correctly", 18, function() {
p.off();
checkbox.off();
p.click(); // 0 should be fired
checkbox.change(); // 0 should be fired
p.trigger("click"); // 0 should be fired
checkbox.trigger("change"); // 0 should be fired
clone.find("p:first").trigger( "click", true ); // 3 events should fire
clone.find("p:first").trigger( "click", true ); // 3 events should fire
clone.find("#check1").trigger( "change", true ); // 3 events should fire
clone.remove();
clone.find("p:first").click(); // 0 should be fired
clone.find("#check1").change(); // 0 events should fire
clone.find("p:first").trigger("click"); // 0 should be fired
clone.find("#check1").trigger("change"); // 0 events should fire
});
test( "Check order of focusin/focusout events", 2, function() {
@ -2657,10 +2665,10 @@ test( "Check order of focusin/focusout events", 2, function() {
});
// gain focus
input.focus();
input.trigger("focus");
// then lose it
jQuery("#search").focus();
jQuery("#search").trigger("focus");
// cleanup
input.off();

View File

@ -121,7 +121,7 @@ var testWrap = function( val ) {
equal( result.text(), defaultText, "Check for element wrapping" );
QUnit.reset();
jQuery("#check1").click(function() {
jQuery("#check1").on( "click", function() {
var checkbox = this;
ok( checkbox.checked, "Checkbox's state is erased after wrap() action, see #769" );
@ -168,7 +168,7 @@ var testWrap = function( val ) {
equal( j[ 0 ].parentNode.nodeName.toLowerCase(), "div", "Wrapping works." );
// Wrap an element with a jQuery set and event
result = jQuery("<div></div>").click(function() {
result = jQuery("<div></div>").on( "click", function() {
ok( true, "Event triggered." );
// Remove handlers on detached elements
@ -493,7 +493,7 @@ var testAppend = function( valueObj ) {
$radioChecked = jQuery("input:radio[name='R1']").eq( 1 );
$radioParent = $radioChecked.parent();
$radioUnchecked = jQuery("<input type='radio' name='R1' checked='checked'/>").appendTo( $radioParent );
$radioChecked.click();
$radioChecked.trigger("click");
$radioUnchecked[ 0 ].checked = false;
$radioParent.wrap("<div></div>");
equal( $radioChecked[ 0 ].checked, true, "Reappending radios uphold which radio is checked" );
@ -641,7 +641,7 @@ test( "append the same fragment with events (Bug #6997, 5566)", function() {
// native event handlers on the original object don't get disturbed when they are
// modified on the clone
if ( doExtra ) {
element = jQuery("div:first").click(function() {
element = jQuery("div:first").on( "click", function() {
ok( true, "Event exists on original after being unbound on clone" );
jQuery( this ).unbind("click");
});
@ -653,20 +653,20 @@ test( "append the same fragment with events (Bug #6997, 5566)", function() {
clone.remove();
}
element = jQuery("<a class='test6997'></a>").click(function() {
element = jQuery("<a class='test6997'></a>").on( "click", function() {
ok( true, "Append second element events work" );
});
jQuery("#listWithTabIndex li").append( element )
.find("a.test6997").eq( 1 ).click();
.find("a.test6997").eq( 1 ).trigger("click");
element = jQuery("<li class='test6997'></li>").click(function() {
element = jQuery("<li class='test6997'></li>").on( "click", function() {
ok( true, "Before second element events work" );
start();
});
jQuery("#listWithTabIndex li").before( element );
jQuery("#listWithTabIndex li.test6997").eq( 1 ).click();
jQuery("#listWithTabIndex li.test6997").eq( 1 ).trigger("click");
});
test( "append HTML5 sectioning elements (Bug #6485)", function() {
@ -808,13 +808,13 @@ test( "appendTo(String|Element|Array<Element>|jQuery)", function() {
t( "Append select", "#foo select", [ "select1" ] );
QUnit.reset();
div = jQuery("<div/>").click(function() {
div = jQuery("<div/>").on( "click", function() {
ok( true, "Running a cloned click." );
});
div.appendTo("#qunit-fixture, #moretests");
jQuery("#qunit-fixture div:last").click();
jQuery("#moretests div:last").click();
jQuery("#qunit-fixture div:last").trigger("click");
jQuery("#moretests div:last").trigger("click");
QUnit.reset();
div = jQuery("<div/>").appendTo("#qunit-fixture, #moretests");
@ -1181,35 +1181,35 @@ var testReplaceWith = function( val ) {
deepEqual( jQuery("#anchor1").contents().get(), [ tmp ], "Replace text node with element" );
tmp = jQuery("<div/>").appendTo("#qunit-fixture").click(function() {
tmp = jQuery("<div/>").appendTo("#qunit-fixture").on( "click", function() {
ok( true, "Newly bound click run." );
});
y = jQuery("<div/>").appendTo("#qunit-fixture").click(function() {
y = jQuery("<div/>").appendTo("#qunit-fixture").on( "click", function() {
ok( false, "Previously bound click run." );
});
child = y.append("<b>test</b>").find("b").click(function() {
child = y.append("<b>test</b>").find("b").on( "click", function() {
ok( true, "Child bound click run." );
return false;
});
y.replaceWith( val(tmp) );
tmp.click();
y.click(); // Shouldn't be run
child.click(); // Shouldn't be run
tmp.trigger("click");
y.trigger("click"); // Shouldn't be run
child.trigger("click"); // Shouldn't be run
y = jQuery("<div/>").appendTo("#qunit-fixture").click(function() {
y = jQuery("<div/>").appendTo("#qunit-fixture").on( "click", function() {
ok( false, "Previously bound click run." );
});
child2 = y.append("<u>test</u>").find("u").click(function() {
child2 = y.append("<u>test</u>").find("u").on( "click", function() {
ok( true, "Child 2 bound click run." );
return false;
});
y.replaceWith( val(child2) );
child2.click();
child2.trigger("click");
set = jQuery("<div/>").replaceWith( val("<span>test</span>") );
@ -1329,7 +1329,7 @@ test( "clone()", function() {
equal( jQuery("#nonnodes").contents().clone().length, 3, "Check node,textnode,comment clone works (some browsers delete comments on clone)" );
// Verify that clones of clones can keep event listeners
div = jQuery("<div><ul><li>test</li></ul></div>").click(function() {
div = jQuery("<div><ul><li>test</li></ul></div>").on( "click", function() {
ok( true, "Bound event still exists." );
});
clone = div.clone( true ); div.remove();
@ -1344,7 +1344,7 @@ test( "clone()", function() {
// Verify that cloned children can keep event listeners
div = jQuery("<div/>").append([ document.createElement("table"), document.createElement("table") ]);
div.find("table").click(function() {
div.find("table").on( "click", function() {
ok( true, "Bound event still exists." );
});
@ -1358,7 +1358,7 @@ test( "clone()", function() {
clone.remove();
// Make sure that doing .clone() doesn't clone event listeners
div = jQuery("<div><ul><li>test</li></ul></div>").click(function() {
div = jQuery("<div><ul><li>test</li></ul></div>").on( "click", function() {
ok( false, "Bound event still exists after .clone()." );
});
clone = div.clone();
@ -1776,9 +1776,9 @@ test( "remove() event cleaning ", 1, function() {
count = 0;
first = jQuery("#ap").children(":first");
cleanUp = first.click(function() {
cleanUp = first.on( "click", function() {
count++;
}).remove().appendTo("#qunit-fixture").click();
}).remove().appendTo("#qunit-fixture").trigger("click");
strictEqual( 0, count, "Event handler has been removed" );
@ -1795,9 +1795,9 @@ test( "detach() event cleaning ", 1, function() {
count = 0;
first = jQuery("#ap").children(":first");
cleanUp = first.click(function() {
cleanUp = first.on( "click", function() {
count++;
}).detach().appendTo("#qunit-fixture").click();
}).detach().appendTo("#qunit-fixture").trigger("click");
strictEqual( 1, count, "Event handler has not been removed" );
@ -1880,13 +1880,13 @@ test( "jQuery.cleanData", function() {
div.remove();
function getDiv() {
var div = jQuery("<div class='outer'><div class='inner'></div></div>").click(function() {
var div = jQuery("<div class='outer'><div class='inner'></div></div>").on( "click", function() {
ok( true, type + " " + pos + " Click event fired." );
}).focus(function() {
}).on( "focus", function() {
ok( true, type + " " + pos + " Focus event fired." );
}).find("div").click(function() {
}).find("div").on( "click", function() {
ok( false, type + " " + pos + " Click event fired." );
}).focus(function() {
}).on( "focus", function() {
ok( false, type + " " + pos + " Focus event fired." );
}).end().appendTo("body");