Я подошел очень близко, я думаю, но не могу охватить каждый один один из перечисленных ниже фронтов:
- отключить использование клавиш возврата, удаления, клавиши со стрелкой влево, клавиши home и ctrl по разным причинам (все из которых оказываются трудными, если учесть путаницу, вызванную одновременным удерживанием двух)
- убедитесь, что пользователь не может выйти из поля, а затем повторно войти в положение, отличное от конца (атрибуты
onfocus
и onclick
охватывают это)
- крутой: запоминайте значение каждый раз, когда символ успешно добавляется, так что если пользователь решит изменить значение с помощью кода JavaScript, введенного через строку адреса, исходные данные могут быть восстановлены
Видя, как практического использования этого будет очень мало (ну, если честно), я просто стремлюсь к этому как к демонстрации знаний. Увы, кажется, мне этого мало; тем не менее, вот код, с которым я сейчас работаю для справки:
<input id="test" />
<script>
var d = '', kd = 0;
cancel = function(event)
{
event.target.value = '';
event.target.value = d;
};
handle_up = function(event)
{
if (event.keyCode == 36 || event.keyCode == 37) // home, left
{
kd = 0;
cancel(event);
event.target.value = d;
}
if (event.keyCode != 8 && event.keyCode != 46) // backspace and delete
d = event.target.value;
else // backspace
event.target.value = d; // set to stored ("cached") value
};
handle_down = function(event)
{
if (kd == 1)
{
cancel(event);
return false;
}
if (event.keyCode == 36 || event.keyCode == 37)
{
kd = 1;
cancel(event);
}
if (event.keyCode == 8 || event.keyCode == 46)
{
kd = 1;
cancel(event);
}
};
HTMLElement.prototype.perma = function()
{
this.setAttribute('onfocus', 'cancel(event)');
this.setAttribute('onclick', 'cancel(event)');
this.setAttribute('onkeyup', 'handle_up(event)');
this.setAttribute('onkeydown', 'handle_down(event)');
};
$('#test').perma();
</script>
Опять же, хотя это было бы просто ради новизны, я думаю, было бы действительно здорово увидеть ум, необходимый для того, чтобы получить поле ввода, чтобы отрицать любое действие, кроме ввода данных.