2015-12-21 3 views
0

Я пытаюсь сделать небольшое выпадающее изображение образца, когда пользователь вводит определенную комбинацию букв в форме. Я думаю, что у меня проблемы с синтаксисом/логикой, потому что я даже не могу заставить предупреждения работать.on keypress jquery issues

$(document).ready(function() { 

    $("#inputt").keypress(

    function(event) { 

     if (event.which == melee || MELEE) { 

      alert("You typed MELEE"); 

     } else if (event.which == knuckle || KNUCKLE) { 

      alert("You typed KNUCKLE"); 

     } else { 

      alert("Neither!!!"); 
      $('.knuckle').hide(); 
      $('.melee').hide(); 

     } 

    }); 

}); 

Вот пример. https://jsfiddle.net/galnova/snp1hqr7/1/

+2

Вы не определили 'melee',' MELEE', '' knuckle' или KNUCKLE' переменные в любом месте ...? –

+0

, если вы посмотрите на консоль своего браузера при запуске скрипта, вы можете увидеть хотя бы часть проблемы ... 'Uncaught ReferenceError: melee is not defined' –

+0

event.which будет возвращать целое число, представляющее нажатый ключ, который может можно найти http://www.asciitable.com/ ... вы не можете найти слово, которое было набрано, используя это в одиночку. –

ответ

1

Таким образом, у вас есть ошибка в коде, поскольку такого события нет. Если вы видите консоль режима разработчика, вы можете увидеть ошибку. Таким образом, он должен либо скомбинировать значение текстового поля, используя $("#inputt").val() со значением «melee». Это будет делать трюк

if (event.which == melee || MELEE) { 

должен быть заменен

if ($("#inputt").val() == 'melee'|| $("#inputt").val() =='MELEE') { 

и впоследствии для

else if (event.which == knuckle || KNUCKLE) 

с

else if ($("#inputt").val() == 'knuckle' || $("#inputt").val() ==KNUCKLE) 

https://jsfiddle.net/aadi/2odkq3t8/

Редактировать: - Также вы используете keypress, поэтому он будет запущен, если текст, который вы написали, больше, чем в ближнем бою, и введите другой символ, тогда он будет запущен. Было бы лучше, если вы используете событие keyup, которое запускается, когда после нажатия клавиши отпускается какая-либо клавиша.

+0

Или даже лучше, 'if ($ (" # inputt "). Val(). ToLower() == 'melee')' – Draco18s

+0

https://jsfiddle.net/galnova/snp1hqr7/7/ Я обновил его, и он все еще не работает. – riotgear

+0

обновил jsfiddle ... Также событие, которое вы используете, является нажатием клавиши, поэтому он будет запущен, если текст, который вы написали, больше, чем в ближнем бою, и введите другой символ, тогда он будет запущен – Naruto

1

Есть несколько проблем с кодом.

  • Ваш код выдает ошибку. melee is not defined. Вы ищете строковое значение, поэтому ближний бой должен быть в кавычках.
  • event.which возвращает целое число, а не строку.
  • Я не совсем уверен, что вы хотите связать свое событие нажатием ... , потому что это означает, что он работает с каждым нажатием клавиши. Если вы ищете для определенного слова, вместо этого вы можете привязаться к событию изменения . Или, как минимум, избавиться от предупреждения на каждом нажатии клавиши, потому что это раздражает. В моем примере я использую change, который требует, чтобы пользователь нажимал клавишу ввода после ввода слова.
  • Что делать, если кто-то типа Melee? Ваш код ищет только два экземпляра слова, но есть много других, которые вы, возможно, захотите учесть. Один из способов справиться с этим - положить значение в нижнем регистре, а затем вам нужно сравнить только с melee.

Here is an updated fiddle

$("#inputt").change(

    function() { 

     if ($(this).val().toLowerCase() === "melee") { 

      alert("You typed MELEE"); 

     } else if ($(this).val().toLowerCase() === "knuckle") { 

      alert("You typed KNUCKLE"); 

     } else { 

      alert("Neither!!!"); 
      $('.knuckle').hide(); 
      $('.melee').hide(); 

     } 

    }); 
+0

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

+1

Я не понимаю, как печатать эмулирует ваш ответ ajax (мне нужно будет посмотреть, как вы делаете вызов), но мой ответ показывает, как привязываться к событию изменения текстового поля, что означает, что он запускается только тогда, когда пользователь нажимает кнопку ввода после фокусировки на текстовом поле. Вы можете поочередно создать кнопку и привязать к событию клика на кнопке, чтобы определить, когда пользователь набрал текст и готов отправить свое слово. –

+0

https://jsfiddle.net/galnova/5jy7d43u/2/ Спасибо. Это работает. Есть ли способ показать или скрыть, как только я закончил печатать, а не щелкнул его? – riotgear