Проверка символов и порядка символов из формы ввода с помощью Javascript для отображения изображений, которые соответствуют как символам, так и порядку символов

Я создаю простую систему, которая будет отображать изображения в соответствии с буквами, найденными в форме ввода текста. Например, если пользователь вводит букву «p», отображается изображение с идентификатором #paris. Пример ниже работает и достигает первой части цели.

  <input id = "words" name = "email" class = "userInput" type = "text" /><span id = "emailError"></span>
  <br>
  <br>
      <div id = "Button" style = "height:100px; width: 150px; background-color: #000;">
        </div>
<img id = "paris" style = "display:none" src = "animsAll/paris.gif">

JQuery

$( "#words" ).keyup(function() {

if ($('#words').val().indexOf('p') > -1) {
    $('#paris').show();

}

});

Однако отсутствует один важный элемент.

Когда я добавляю больше изображений (будет 6 изображений на выбор), системе необходимо отображать эти изображения в соответствии с порядком, в котором пользователь ввел слово.

Это означает, что если пользователь набрал «peter», изображение, соответствующее «p», будет отображаться в течение нескольких секунд, а затем скрываться, а затем изображение, которое соединяется с «e», будет отображаться после этого. [Скрытие и установка времени не является проблемой.]

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

Я понимаю IndexOf в наборе известных строк, но в случае форм ввода, где возможности бесконечны, как мне отсортировать символы, найденные во вводе пользователем (в примере "P, e, t, e, r" чтобы система правильно отображала порядок изображений?


[ДЕНЬ СПУСТЯ: СПАСИБО ЗА ОБНОВЛЕНИЕ ОТВЕТА И ВОПРОСА]

Спасибо!!! Теперь, когда я более подробно проработал проблему, я понимаю, что, возможно, исказил свой вопрос. Возможно, мне стоит задать другой вопрос. То, что я здесь делаю В самом деле, - это форма синхронизации губ анимации. Я создал (анимационных) персонажей, и у меня есть соответствующие движения рта в соответствии с каждой буквой для синхронизации губ.

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


[ОБНОВЛЕНИЕ]

Что происходит сейчас, так это то, что буквы совпадают с изображениями, появляются все одновременно. Кроме того, порядок, в котором появляются изображения, соответствует порядку, отображаемому в HTML, а не фактическому вводу пользователя. Вы можете увидеть пример, показанный на изображении ниже, где я написал «Питер», и система вернула четыре отдельных изображения. Кроме того, отсутствует второе изображение "е".

Спасибо, ребята, за ответы. Я проведу еще немного исследований по этому поводу. Я вижу направление, в котором мне нужно идти.

[СМОТРЕТЬ ИЗОБРАЖЕНИЕ НИЖЕ]

Проверка символов и порядка символов из формы ввода с помощью Javascript для отображения изображений, которые соответствуют как символам, так и порядку символов

[HTML]

  <img id = "heatherCatPaw1AI" style = "display:none" src = "img_chars/Heather_catPaw_1_A,I.svg">
  <img id = "heatherCatPaw1E" style = "display:none" src = "img_chars/Heather_catPaw_1_E.svg">
  <img id = "heatherCatPaw1MPB" style = "display:none" src = "img_chars/Heather_catPaw_1_M,P,B.svg">
  <img id = "heatherCatPaw1O" style = "display:none" src = "img_chars/Heather_catPaw_1_O.svg">
  <img id = "heatherCatPaw1TS" style = "display:none" src = "img_chars/Heather_catPaw_1_T,S,ELSE.svg">
  <img id = "heatherCatPaw1UQ" style = "display:none" src = "img_chars/Heather_catPaw_1_U,Q.svg">
  <img id = "heatherCatPaw1WR" style = "display:none" src = "img_chars/Heather_catPaw_1_W,R.svg">

[JAVASCRIPT]

$("#btn").click(function() {
  $.each($("#myinput").val().split(''), function(index, value) {
      if ($('#myinput').val().indexOf('a') > -1) {
        $('#heatherCatPaw1AI').show().delay(200).fadeOut();
      }

      if ($('#myinput').val().indexOf('i') > -1) {
        $('#heatherCatPaw1AI').show().delay(200).fadeOut();
      }

      if ($('#myinput').val().indexOf('e') > -1) {
      $('#heatherCatPaw1E').show().delay(200).fadeOut();
      }

      if ($('#myinput').val().indexOf('m') > -1) {
      $('#heatherCatPaw1MPB').show().delay(200).fadeOut();
      }

      if ($('#myinput').val().indexOf('p') > -1) {
      $('#heatherCatPaw1MPB').show().delay(200).fadeOut();
      }

      if ($('#myinput').val().indexOf('b') > -1) {
      $('#heatherCatPaw1MPB').show().delay(200).fadeOut();
      }

      if ($('#myinput').val().indexOf('o') > -1) {
      $('#heatherCatPaw1O').show().delay(200).fadeOut();
      }


      if ($('#myinput').val().indexOf('') > -1) {
      $('#heatherCatPaw1TS').show().delay(200).fadeOut();
      }

      if ($('#myinput').val().indexOf('s') > -1) {
      $('#heatherCatPaw1TS').show().delay(200).fadeOut();
      }

      if ($('#myinput').val().indexOf('u') > -1) {
      $('#heatherCatPaw1UQ').show().delay(200).fadeOut();
      }

      if ($('#myinput').val().indexOf('q') > -1) {
      $('#heatherCatPaw1UQ').show().delay(200).fadeOut();
      }

      if ($('#myinput').val().indexOf('w') > -1) {
      $('#heatherCatPaw1WR').show().delay(200).fadeOut();
      }
      if ($('#myinput').val().indexOf('r') > -1) {
      $('#heatherCatPaw1WR').show().delay(200).fadeOut();
      }

  });

предоставить пример результата html, если пользователь вводит ПЕТР

plonknimbuzz 10.03.2018 02:20

$ ("# myinput"). keyup (function () {var myarray = $ ("# myinput"). val.split ('')});

Bryan Dellinger 10.03.2018 02:31

привет @plonknimbuzz Я добавил обновление к вопросу.

Manuela 10.03.2018 21:45

привет @BryanDellinger, большое спасибо за ваш ответ, я понимаю, что вопрос был неполным с моей стороны, теперь я его обновил. Тем не менее ваш великий ответ указал мне правильное направление.

Manuela 10.03.2018 21:48

привет, почему вы все еще делаете это с помощью indexof. делать, как сказал Брайан в ответе ниже, намного лучше

plonknimbuzz 11.03.2018 09:24
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
119
1

Ответы 1

используйте split, чтобы поместить строку в массив, затем пропустите его и сделайте все, что хотите. (Я бы, вероятно, сделал это на чем-то другом, кроме клавиатуры, или он будет работать все время)

$("#btn").click(function() {
  $.each($("#myinput").val().split(''), function(index, value) {
    $('#myol').append('<li>' + value + '</li>');
  });
});
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type = "text" id = "myinput">
<button id = "btn">
 click me
</button>

<ol id = "myol">

</ol>

я просто знаю, что мы можем сделать split('') +1

plonknimbuzz 10.03.2018 03:13

Большое спасибо, Брайан. Теперь, когда я более подробно проработал проблему, я понимаю, что, возможно, исказил свой вопрос. Я обновил вопрос выше. Возможно, мне стоит задать другой вопрос. Что я действительно здесь делаю, так это разновидность анимации, синхронизирующей губы. Я создал (анимационных) персонажей, и у меня есть соответствующие движения рта в соответствии с каждой буквой для синхронизации губ.

Manuela 10.03.2018 21:38

Что происходит сейчас, так это то, что буквы совпадают с изображениями, появляются все одновременно. Кроме того, порядок, в котором появляются изображения, соответствует порядку, отображаемому в HTML, а не фактическому вводу пользователя. Вы можете увидеть пример, показанный на изображении, которое я добавил к обновленному вопросу, где я написал «Питер», и система вернула четыре отдельных изображения. Кроме того, отсутствует второе изображение "е". В любом случае, большое спасибо, что ваш ответ ведет меня в правильном направлении в моем обучении :)

Manuela 10.03.2018 21:39

Другие вопросы по теме