Code: Disabling text selection
Inspired by Thomas’s classic and event delegation.
/**
* Element.enableTextSelection(element, isEnabled)
*
* Enables or disables text selection within the given element.
* - element (Element): The element within which a dragging motion
* _should_ or _should not_ behave like text selection.
* - isEnabled (boolean): Whether to enable or disable text selection.
**/
(function() {
var IGNORED_ELEMENTS = [];
function _textSelectionHandler(event) {
var element = Event.element(event);
if (!element) return;
for (var i = 0, node; node = IGNORED_ELEMENTS[i]; i++) {
if (element === node || element.descendantOf(node)) {
Event.stop(event);
break;
}
}
}
if (document.attachEvent)
document.onselectstart = _textSelectionHandler.bindAsEventListener(window);
else
document.observe('mousedown', _textSelectionHandler);
Element.addMethods({
enableTextSelection: function(element, isEnabled) {
if (isEnabled) {
IGNORED_ELEMENTS = IGNORED_ELEMENTS.without(element);
} else {
if (!IGNORED_ELEMENTS.include(element))
IGNORED_ELEMENTS.push(element);
}
}
});
})();
Comments
Hi Andrew,
Nice. On Firefox I also like to use the following as it stops drag selection better:
I also like to change the cursor from the text one: