Чисто в качестве эксперимента я пытаюсь сделать абсолютно невозможным что-либо, кроме ввода большего количества данных в поле ввода; возможно? - PullRequest
1 голос
/ 20 марта 2009

Я подошел очень близко, я думаю, но не могу охватить каждый один один из перечисленных ниже фронтов:

  • отключить использование клавиш возврата, удаления, клавиши со стрелкой влево, клавиши 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>

Опять же, хотя это было бы просто ради новизны, я думаю, было бы действительно здорово увидеть ум, необходимый для того, чтобы получить поле ввода, чтобы отрицать любое действие, кроме ввода данных.

Ответы [ 3 ]

1 голос
/ 20 марта 2009

Как насчет проверки введенных данных, сравнения нового ввода и отказа от всего, что не является расширением того, что уже было там? Может быть, немного долго, особенно когда поле становится длиннее, но эффективнее?

1 голос
/ 20 марта 2009

Еще одна вещь, которую следует учитывать, заключается в том, что схемы валидации, такие как описанная вами, не должны осуществляться исключительно на стороне клиента.

Если, например, javascript отключен, кто-то может отправить непроверенные данные. Если это произойдет, код на стороне сервера будет использовать его, и условие, которое вы проверяете, останется незамеченным.

Всегда резервное копирование проверки на стороне клиента с одной и той же проверкой на сервере.

1 голос
/ 20 марта 2009

Кстати, так как это для удовольствия. Вы пытались сделать белый список того, что вы можете ввести вместо черного списка того, что вы не можете сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...