2015-06-14 4 views
1

В настоящее время я делаю проект с переназначением символов на слова, обнаруживая функцию keyup. К сожалению, я только смог получить первый символ и переназначить слово, которое я хочу. В моем проекте мне нужно напрямую получить весь ввод на клавиатуре и напрямую преобразовать его в слово, которое я хочу, в том же текстовом поле. Например, когда я ввожу текст в текстовое поле, он преобразуется в «are» напрямую. Я не знаю, почему это прекратило получение второго символа и переназначение не было. Ниже мой код, надеюсь, кто-то может сказать мне мою ошибку. Спасибо.Как переназначить клавиатуру в пределах той же textarea

<textarea class="width-100" id="translated-text" onkeyup="myFunctionkey(event);" rows="10"></textarea> 
<script> 
function myFunctionkey(e) { 
conversion(); 
} 

function conversion(){ 
var x = document.getElementById('translated-text'); 
if(x.value == 'a'){ 
x.value='yes'; 
} 
if(x.value == 'q'){ 
x.value = 'are'; 
} 
} 
</script> 
+0

Просто уточните: вы хотите нанести на карту ввод конкретному слову? что это за слово? – Alex

+0

несколько простых английских слов для упрощения процесса ввода. – user2359110

ответ

3

Из того, что я понимаю, вы хотите только захватить вход и заменить ключевой штрих полным словом.

Возможно, это будет сделано. Я изменил onkeyup на onkeypress, потому что это более надежно от того, что я помню.

<textarea id="translated-text" cols="50" rows="10" onkeypress="replaceInputChar(event);"></textarea> 
<script type="text/javascript"> 
    //create replacement map 
    var map = { 
     "a": "and", 
     "b": "bold", 
     "c": "change" 
    }; 


    function replaceInputChar(e) 
    { 
     var ctl = document.getElementById("translated-text"); //control 
     var char = String.fromCharCode(e.keyCode); //typed char 

     if (char in map) //check if letter is defined in map 
     { 
      //insert replacement instead of letter 
      if("selectionStart" in ctl) 
      { 
       //in modern browsers we can easily mimic default behavior at cursor position 
       var pos = ctl.selectionStart; 
       ctl.value = ctl.value.substr(0, pos) + map[char] + ctl.value.substr(ctl.selectionEnd); 
       ctl.selectionStart = pos + map[char].length; 
       ctl.selectionEnd = ctl.selectionStart; 
      } 
      else 
       ctl.value += map[char]; 

      if ("preventDefault" in e) //modern browser event cancelling 
       e.preventDefault(); 
      else 
      { 
       //old browser event cancelling 
       e.returnValue = false; //IE8 
       return false; 
      } 
     } 
    } 
    </script> 
+0

спасибо, что у вас есть новый способ. Теперь я могу сопоставлять то, что хочу. еще раз спасибо – user2359110

+0

Добро пожаловать! Я исправил отмену событий IE8 и добавил поведение вставки по умолчанию (в позиции курсора и замене выбора) для современных браузеров. –

+0

Как насчет того, если мне нравится комбинировать комбинированный ключ? скажем, shift + a выйдет другое слово? Спасибо за любезное руководство – user2359110

0

Вы должны использовать оператор сравнения '==' вместо оператора присваивания '=', а переназначение значение, например:

x.value=='a' 

Edit:

Вы должны проверить обновленный код для вашей проблемы здесь: https://jsfiddle.net/o4coLr5t/1/

Теперь символы, которые вы выбрали для переназначения в javascript, отобразите строку, которую вы наберете персонаж. В противном случае при нажатии клавиш ничего не будет отображаться. Итак, попробуйте добавить все символы keycodes в код javascript. Надеюсь, это поможет.

+0

спасибо, я отредактировал, но все еще не функционировал нормально, только смог получить 1-й символ, начать со второго символа не могу обнаружить – user2359110

+0

он работает для меня: https://jsfiddle.net/o4coLr5t/ – Manu

+0

Я, но только для 1-го символа. когда вы печатаете со второго символа, конвертер не был сделан – user2359110