mirror of
https://github.com/jquery/jquery.git
synced 2025-01-10 18:24:24 +00:00
Fix #12989. Remove ajax "global" event behavior.
This commit is contained in:
parent
b382af685a
commit
c2d6847de0
38
src/event.js
38
src/event.js
@ -198,33 +198,30 @@ jQuery.event = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
trigger: function( event, data, elem, onlyHandlers ) {
|
trigger: function( event, data, elem, onlyHandlers ) {
|
||||||
// Don't do events on text and comment nodes
|
|
||||||
if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Event object or event type
|
var i, cur, old, ontype, special, handle, eventPath, bubbleType,
|
||||||
var cache, i, cur, old, ontype, special, handle, eventPath, bubbleType,
|
|
||||||
type = event.type || event,
|
type = event.type || event,
|
||||||
namespaces = event.namespace ? event.namespace.split(".") : [];
|
namespaces = event.namespace ? event.namespace.split(".") : [];
|
||||||
|
|
||||||
|
elem = elem || document;
|
||||||
|
|
||||||
|
// Don't do events on text and comment nodes
|
||||||
|
if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// focus/blur morphs to focusin/out; ensure we're not firing them right now
|
// focus/blur morphs to focusin/out; ensure we're not firing them right now
|
||||||
if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
|
if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( type.indexOf( "." ) >= 0 ) {
|
if ( type.indexOf(".") >= 0 ) {
|
||||||
// Namespaced trigger; create a regexp to match event type in handle()
|
// Namespaced trigger; create a regexp to match event type in handle()
|
||||||
namespaces = type.split(".");
|
namespaces = type.split(".");
|
||||||
type = namespaces.shift();
|
type = namespaces.shift();
|
||||||
namespaces.sort();
|
namespaces.sort();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !elem && !jQuery.event.global[ type ] ) {
|
|
||||||
// No jQuery handlers for this event type, and it can't have inline handlers
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Caller can pass in an Event, Object, or just an event type string
|
// Caller can pass in an Event, Object, or just an event type string
|
||||||
event = typeof event === "object" ?
|
event = typeof event === "object" ?
|
||||||
// jQuery.Event object
|
// jQuery.Event object
|
||||||
@ -236,22 +233,9 @@ jQuery.event = {
|
|||||||
|
|
||||||
event.type = type;
|
event.type = type;
|
||||||
event.isTrigger = true;
|
event.isTrigger = true;
|
||||||
event.namespace = namespaces.join( "." );
|
event.namespace = namespaces.join(".");
|
||||||
event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
|
event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
|
||||||
ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
|
ontype = type.indexOf(":") < 0 ? "on" + type : "";
|
||||||
|
|
||||||
// Handle a global trigger
|
|
||||||
if ( !elem ) {
|
|
||||||
|
|
||||||
// TODO: Stop taunting the data cache; remove global events and always attach to document
|
|
||||||
cache = jQuery.cache;
|
|
||||||
for ( i in cache ) {
|
|
||||||
if ( cache[ i ].events && cache[ i ].events[ type ] ) {
|
|
||||||
jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clean up the event in case it is being reused
|
// Clean up the event in case it is being reused
|
||||||
event.result = undefined;
|
event.result = undefined;
|
||||||
|
@ -7,7 +7,10 @@ module( "ajax", {
|
|||||||
return callback;
|
return callback;
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
teardown: moduleTeardown
|
teardown: function() {
|
||||||
|
jQuery( document ).off( "ajaxStart ajaxStop ajaxSend ajaxComplete ajaxError ajaxSuccess" );
|
||||||
|
moduleTeardown();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
@ -16,24 +19,16 @@ module( "ajax", {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addGlobalEvents() {
|
||||||
|
jQuery( document ).on( "ajaxStart ajaxStop ajaxSend ajaxComplete ajaxError ajaxSuccess", function( e ) {
|
||||||
|
ok( true, e.type );
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
//----------- jQuery.ajax()
|
//----------- jQuery.ajax()
|
||||||
|
|
||||||
ajaxTest( "jQuery.ajax() - success callbacks", 8, {
|
ajaxTest( "jQuery.ajax() - success callbacks", 8, {
|
||||||
setup: function() {
|
setup: addGlobalEvents,
|
||||||
jQuery("#foo").ajaxStart(function() {
|
|
||||||
ok( true, "ajaxStart" );
|
|
||||||
}).ajaxStop(function() {
|
|
||||||
ok( true, "ajaxStop" );
|
|
||||||
}).ajaxSend(function() {
|
|
||||||
ok( true, "ajaxSend" );
|
|
||||||
}).ajaxComplete(function() {
|
|
||||||
ok( true, "ajaxComplete" );
|
|
||||||
}).ajaxError(function() {
|
|
||||||
ok( false, "ajaxError" );
|
|
||||||
}).ajaxSuccess(function() {
|
|
||||||
ok( true, "ajaxSuccess" );
|
|
||||||
});
|
|
||||||
},
|
|
||||||
url: url("data/name.html"),
|
url: url("data/name.html"),
|
||||||
beforeSend: function() {
|
beforeSend: function() {
|
||||||
ok( true, "beforeSend" );
|
ok( true, "beforeSend" );
|
||||||
@ -47,21 +42,7 @@ module( "ajax", {
|
|||||||
});
|
});
|
||||||
|
|
||||||
ajaxTest( "jQuery.ajax() - success callbacks - (url, options) syntax", 8, {
|
ajaxTest( "jQuery.ajax() - success callbacks - (url, options) syntax", 8, {
|
||||||
setup: function() {
|
setup: addGlobalEvents,
|
||||||
jQuery("#foo").ajaxStart(function() {
|
|
||||||
ok( true, "ajaxStart" );
|
|
||||||
}).ajaxStop(function() {
|
|
||||||
ok( true, "ajaxStop" );
|
|
||||||
}).ajaxSend(function() {
|
|
||||||
ok( true, "ajaxSend" );
|
|
||||||
}).ajaxComplete(function() {
|
|
||||||
ok( true, "ajaxComplete" );
|
|
||||||
}).ajaxError(function() {
|
|
||||||
ok( false, "ajaxError" );
|
|
||||||
}).ajaxSuccess(function() {
|
|
||||||
ok( true, "ajaxSuccess" );
|
|
||||||
});
|
|
||||||
},
|
|
||||||
create: function( options ) {
|
create: function( options ) {
|
||||||
return jQuery.ajax( url("data/name.html"), options );
|
return jQuery.ajax( url("data/name.html"), options );
|
||||||
},
|
},
|
||||||
@ -77,21 +58,7 @@ module( "ajax", {
|
|||||||
});
|
});
|
||||||
|
|
||||||
ajaxTest( "jQuery.ajax() - success callbacks (late binding)", 8, {
|
ajaxTest( "jQuery.ajax() - success callbacks (late binding)", 8, {
|
||||||
setup: function() {
|
setup: addGlobalEvents,
|
||||||
jQuery("#foo").ajaxStart(function() {
|
|
||||||
ok( true, "ajaxStart" );
|
|
||||||
}).ajaxStop(function() {
|
|
||||||
ok( true, "ajaxStop" );
|
|
||||||
}).ajaxSend(function() {
|
|
||||||
ok( true, "ajaxSend" );
|
|
||||||
}).ajaxComplete(function() {
|
|
||||||
ok( true, "ajaxComplete" );
|
|
||||||
}).ajaxError(function() {
|
|
||||||
ok( false, "ajaxError" );
|
|
||||||
}).ajaxSuccess(function() {
|
|
||||||
ok( true, "ajaxSuccess" );
|
|
||||||
});
|
|
||||||
},
|
|
||||||
url: url("data/name.html"),
|
url: url("data/name.html"),
|
||||||
beforeSend: function() {
|
beforeSend: function() {
|
||||||
ok( true, "beforeSend" );
|
ok( true, "beforeSend" );
|
||||||
@ -109,21 +76,7 @@ module( "ajax", {
|
|||||||
});
|
});
|
||||||
|
|
||||||
ajaxTest( "jQuery.ajax() - success callbacks (oncomplete binding)", 8, {
|
ajaxTest( "jQuery.ajax() - success callbacks (oncomplete binding)", 8, {
|
||||||
setup: function() {
|
setup: addGlobalEvents,
|
||||||
jQuery("#foo").ajaxStart(function() {
|
|
||||||
ok( true, "ajaxStart" );
|
|
||||||
}).ajaxStop(function() {
|
|
||||||
ok( true, "ajaxStop" );
|
|
||||||
}).ajaxSend(function() {
|
|
||||||
ok( true, "ajaxSend" );
|
|
||||||
}).ajaxComplete(function() {
|
|
||||||
ok( true, "ajaxComplete" );
|
|
||||||
}).ajaxError(function() {
|
|
||||||
ok( false, "ajaxError" );
|
|
||||||
}).ajaxSuccess(function() {
|
|
||||||
ok( true, "ajaxSuccess" );
|
|
||||||
});
|
|
||||||
},
|
|
||||||
url: url("data/name.html"),
|
url: url("data/name.html"),
|
||||||
beforeSend: function() {
|
beforeSend: function() {
|
||||||
ok( true, "beforeSend" );
|
ok( true, "beforeSend" );
|
||||||
@ -141,21 +94,7 @@ module( "ajax", {
|
|||||||
});
|
});
|
||||||
|
|
||||||
ajaxTest( "jQuery.ajax() - error callbacks", 8, {
|
ajaxTest( "jQuery.ajax() - error callbacks", 8, {
|
||||||
setup: function() {
|
setup: addGlobalEvents,
|
||||||
jQuery("#foo").ajaxStart(function() {
|
|
||||||
ok( true, "ajaxStart" );
|
|
||||||
}).ajaxStop(function() {
|
|
||||||
ok( true, "ajaxStop" );
|
|
||||||
}).ajaxSend(function() {
|
|
||||||
ok( true, "ajaxSend" );
|
|
||||||
}).ajaxComplete(function() {
|
|
||||||
ok( true, "ajaxComplete" );
|
|
||||||
}).ajaxError(function() {
|
|
||||||
ok( true, "ajaxError" );
|
|
||||||
}).ajaxSuccess(function() {
|
|
||||||
ok( false, "ajaxSuccess" );
|
|
||||||
});
|
|
||||||
},
|
|
||||||
url: url("data/name.php?wait=5"),
|
url: url("data/name.php?wait=5"),
|
||||||
beforeSend: function() {
|
beforeSend: function() {
|
||||||
ok( true, "beforeSend" );
|
ok( true, "beforeSend" );
|
||||||
@ -237,7 +176,7 @@ module( "ajax", {
|
|||||||
|
|
||||||
ajaxTest( "jQuery.ajax() - headers", 4, {
|
ajaxTest( "jQuery.ajax() - headers", 4, {
|
||||||
setup: function() {
|
setup: function() {
|
||||||
jQuery("#foo").ajaxSend(function( evt, xhr ) {
|
jQuery( document ).ajaxSend(function( evt, xhr ) {
|
||||||
xhr.setRequestHeader( "ajax-send", "test" );
|
xhr.setRequestHeader( "ajax-send", "test" );
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -394,18 +333,8 @@ module( "ajax", {
|
|||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
ajaxTest( "jQuery.ajax() - abort", 8, {
|
ajaxTest( "jQuery.ajax() - abort", 9, {
|
||||||
setup: function() {
|
setup: addGlobalEvents,
|
||||||
jQuery("#foo").ajaxStart(function() {
|
|
||||||
ok( true, "ajaxStart" );
|
|
||||||
}).ajaxStop(function() {
|
|
||||||
ok( true, "ajaxStop" );
|
|
||||||
}).ajaxSend(function() {
|
|
||||||
ok( true, "ajaxSend" );
|
|
||||||
}).ajaxComplete(function() {
|
|
||||||
ok( true, "ajaxComplete" );
|
|
||||||
});
|
|
||||||
},
|
|
||||||
url: url("data/name.php?wait=5"),
|
url: url("data/name.php?wait=5"),
|
||||||
beforeSend: function() {
|
beforeSend: function() {
|
||||||
ok( true, "beforeSend" );
|
ok( true, "beforeSend" );
|
||||||
@ -660,14 +589,14 @@ module( "ajax", {
|
|||||||
var success = function() {
|
var success = function() {
|
||||||
successCount++;
|
successCount++;
|
||||||
};
|
};
|
||||||
jQuery("#foo").ajaxError(function( e, xml, s, ex ) {
|
jQuery( document ).on( "ajaxError.passthru", function( e, xml, s, ex ) {
|
||||||
errorCount++;
|
errorCount++;
|
||||||
errorEx += ": " + xml.status;
|
errorEx += ": " + xml.status;
|
||||||
});
|
});
|
||||||
jQuery("#foo").one( "ajaxStop", function() {
|
jQuery( document ).one( "ajaxStop", function() {
|
||||||
equal( successCount, 5, "Check all ajax calls successful" );
|
equal( successCount, 5, "Check all ajax calls successful" );
|
||||||
equal( errorCount, 0, "Check no ajax errors (status" + errorEx + ")" );
|
equal( errorCount, 0, "Check no ajax errors (status" + errorEx + ")" );
|
||||||
jQuery("#foo").unbind("ajaxError");
|
jQuery( document ).off("ajaxError.passthru");
|
||||||
start();
|
start();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -1592,7 +1521,7 @@ module( "ajax", {
|
|||||||
pass = function() {
|
pass = function() {
|
||||||
ok( passed++ < 2, "Error callback executed" );
|
ok( passed++ < 2, "Error callback executed" );
|
||||||
if ( passed == 2 ) {
|
if ( passed == 2 ) {
|
||||||
jQuery("#qunit-fixture").unbind("ajaxError");
|
jQuery( document ).off("ajaxError.setupTest");
|
||||||
start();
|
start();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1601,7 +1530,7 @@ module( "ajax", {
|
|||||||
start();
|
start();
|
||||||
};
|
};
|
||||||
|
|
||||||
jQuery("#qunit-fixture").ajaxError( pass );
|
jQuery( document ).on( "ajaxError.setupTest", pass );
|
||||||
|
|
||||||
jQuery.ajaxSetup({
|
jQuery.ajaxSetup({
|
||||||
timeout: 1000
|
timeout: 1000
|
||||||
@ -1767,20 +1696,8 @@ module( "ajax", {
|
|||||||
});
|
});
|
||||||
|
|
||||||
asyncTest( "jQuery.fn.load() - 404 error callbacks", 6, function() {
|
asyncTest( "jQuery.fn.load() - 404 error callbacks", 6, function() {
|
||||||
jQuery("#foo").ajaxStart(function() {
|
addGlobalEvents();
|
||||||
ok( true, "ajaxStart" );
|
jQuery( document ).ajaxStop( start );
|
||||||
}).ajaxStop(function() {
|
|
||||||
ok( true, "ajaxStop" );
|
|
||||||
start();
|
|
||||||
}).ajaxSend(function() {
|
|
||||||
ok( true, "ajaxSend" );
|
|
||||||
}).ajaxComplete(function() {
|
|
||||||
ok( true, "ajaxComplete" );
|
|
||||||
}).ajaxError(function() {
|
|
||||||
ok( true, "ajaxError" );
|
|
||||||
}).ajaxSuccess(function() {
|
|
||||||
ok( false, "ajaxSuccess" );
|
|
||||||
});
|
|
||||||
jQuery("<div/>").load( "data/404.html", function() {
|
jQuery("<div/>").load( "data/404.html", function() {
|
||||||
ok( true, "complete" );
|
ok( true, "complete" );
|
||||||
});
|
});
|
||||||
@ -1921,9 +1838,9 @@ module( "ajax", {
|
|||||||
jQuery.ajaxSetup({
|
jQuery.ajaxSetup({
|
||||||
dataType: "json"
|
dataType: "json"
|
||||||
});
|
});
|
||||||
jQuery("#first").ajaxComplete(function( e, xml, s ) {
|
jQuery( document ).ajaxComplete(function( e, xml, s ) {
|
||||||
strictEqual( s.dataType, "html", "Verify the load() dataType was html" );
|
strictEqual( s.dataType, "html", "Verify the load() dataType was html" );
|
||||||
jQuery("#first").unbind("ajaxComplete");
|
jQuery( document ).unbind("ajaxComplete");
|
||||||
start();
|
start();
|
||||||
});
|
});
|
||||||
jQuery("#first").load("data/test3.html");
|
jQuery("#first").load("data/test3.html");
|
||||||
@ -1938,9 +1855,8 @@ module( "ajax", {
|
|||||||
"foo": "bar"
|
"foo": "bar"
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
jQuery("#foo")
|
jQuery("#foo").load( "data/echoQuery.php", data );
|
||||||
.load( "data/echoQuery.php", data )
|
jQuery( document ).ajaxComplete(function( event, jqXHR, options ) {
|
||||||
.ajaxComplete(function( event, jqXHR, options ) {
|
|
||||||
ok( ~options.data.indexOf("foo=bar"), "Data from ajaxSettings was used" );
|
ok( ~options.data.indexOf("foo=bar"), "Data from ajaxSettings was used" );
|
||||||
start();
|
start();
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user