I’m using the following css to reverse a textarea:
.reverse
{
/* reverse the text */
transform: scale(-1, 1);
-webkit-transform: scale(-1, 1);
-moz-transform: scale(-1, 1);
-o-transform: scale(-1, 1);
transform: scale(-1, 1);
}
This works great, except one thing: navigating through the text using the arrow keys is now backwards. I’d like to reverse the direction of the arrow keys so they work as expected. Here’s what I’ve tried:
$(document).ready(function() {
// flag which indicates when the key event has been overridden
var keyEventOverridden = false;
// reverse the arrow keys for the reverse textbox
$(".reverse").bind("keydown keyup", function(event) {
// allow the default behavior if the key has already been overridden
if (keyEventOverridden)
return true;
// get the keyCode
var keyCode = event.keyCode || event.which;
// create the replacement event
var replacementEvent = $.Event(event.type);
// trigger the right key if the left key was pressed down
if (keyCode === 37)
{
replacementEvent.keyCode = 39;
replacementEvent.which = 39;
}
// trigger the left key if the right key was pressed down
else if (keyCode === 39)
{
replacementEvent.keyCode = 37;
replacementEvent.which = 37;
}
else
{
// allow the default behavior
return true;
}
// prevent the key event from being overridden again
keyEventOverridden = true;
// trigger the replacement event
$(this).trigger(replacementEvent);
// allow the key event to be overridden again
keyEventOverridden = false;
// prevent the default behavior
return false;
});
});
This script doesn’t work. Does anybody have any ideas why?
Well, Couldn’t get it to work the way you designed it originally (ie. by triggering a pseudo event), The browsers are just not allowing manipulated events.
I’ve done a workaround which maybe will be useful to you.
Check the demo: http://jsfiddle.net/pL3Yj/6/
The solution involves overriding the left/right arrows and moving the caret ourselves.