// Bind an event to an element
// Original by Dean Edwards
add: function(element, type, handler, data) {
+ if ( element.nodeType == 3 || element.nodeType == 8 )
+ return;
+
// For whatever reason, IE has trouble passing the window object
// around, causing it to be cloned in the process
if ( jQuery.browser.msie && element.setInterval != undefined )
// Detach an event or set of events from an element
remove: function(element, type, handler) {
+ // don't do events on text and comment nodes
+ if ( element.nodeType == 3 || element.nodeType == 8 )
+ return;
+
var events = jQuery.data(element, "events"), ret, index;
// Namespaced event handlers
// Handle triggering a single element
} else {
+ // don't do events on text and comment nodes
+ if ( element.nodeType == 3 || element.nodeType == 8 )
+ return;
+
var val, ret, fn = jQuery.isFunction( element[ type ] || null ),
// Check to see if we need to provide a fake event, or not
event = !data[0] || !data[0].preventDefault;
// Trigger the native events (except for clicks on links)
if ( fn && donative !== false && val !== false && !(jQuery.nodeName(element, 'a') && type == "click") ) {
this.triggered = true;
- element[ type ]();
+ try {
+ element[ type ]();
+ // prevent IE from throwing an error for some hidden elements
+ } catch (e) {}
}
this.triggered = false;
if ( event.pageX == null && event.clientX != null ) {
var doc = document.documentElement, body = document.body;
event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
- event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientLeft || 0);
+ event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
}
// Add which for key events
// If Safari or IE is used
// Continually check to see if the document is ready
- if (jQuery.browser.msie || jQuery.browser.safari ) (function(){
+ if (jQuery.browser.msie || jQuery.browser.safari ) (function(){
try {
// If IE is used, use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/