JavaScript: Как выделить текст нажатием Enter/Return?

Я пытаюсь создать работающее окно поиска, которое выделяет слова в тексте. Однако я не могу заставить его выполнить поиск, нажав Enter. Есть ли у вас какие-либо предложения, где ошибка в коде? Спасибо!

HTML:

<form>
<input type="text" id="search" onkeypress="if (e.keycode==13) doSearch(document.getElementById('search').value)" placeholder="What are you looking for?">
</form>

JavaScript:

function doSearch(text)
{
if (window.find && window.getSelection)
   {
document.designMode = "on";
var sel = window.getSelection();
sel.collapse(document.body, 0);
while (window.find(text))
      {
document.getElementById("search").blur();
document.execCommand("HiliteColor", false, "green");
sel.collapseToEnd();
      }
document.designMode = "off";
   }
else if (document.body.createTextRange)
   {
var textRange = document.body.createTextRange();
while (textRange.findText(text))
      {
textRange.execCommand("BackColor", false, "green");
textRange.collapse(false);
      }
   }
}

person Zoldkabatos    schedule 09.07.2013    source источник
comment
каковы ваши конкретные проблемы?   -  person epoch    schedule 09.07.2013
comment
вы не можете определить условие напрямую. как вы определитесь?   -  person Dhaval Marthak    schedule 09.07.2013
comment
@epoch: Моя конкретная проблема заключается в том, что он не выполняет поиск, когда я нажимаю Enter. Это работает, если я использую кнопку и команду onmousedown, но я не могу заставить ее работать с нажатием клавиши.   -  person Zoldkabatos    schedule 09.07.2013
comment
@DKM: Пока я искал решение, в каждом ответе использовалась эта часть кода e.keycode, поэтому я подумал, что она принадлежит там ... Я думаю, что с моей стороны было ошибкой оставить это так.   -  person Zoldkabatos    schedule 09.07.2013
comment
@Zoldkabatos, посмотри мой ответ, ты тоже можешь это сделать :)   -  person Dhaval Marthak    schedule 09.07.2013


Ответы (3)


Вместо этого попробуйте вот так

  <input type="text" id="search" onkeypress="if (window.event.keyCode==13) doSearch(this.value);" placeholder="What are you looking for?">

Не нужно использовать document.getElementbyId(), как в текстовом поле, просто сделайте this.value.

ДЕМО-версия скрипки

person Dhaval Marthak    schedule 09.07.2013
comment
Мой уровень действительно намного ниже, чем у обезьяны :( jsfiddle.net/zoldkabatos/mQpGn - person Zoldkabatos; 09.07.2013
comment
@Zoldkabatos Что не так с этой скрипкой? См. это jsfiddle.net/mQpGn/1. У вас где-то есть исключение с вашим кодом. - person Dhaval Marthak; 09.07.2013
comment
Если я нажму Enter в вашем коде, введенное слово не будет выделено. Если это так для вас, это что-то с моим браузером. - person Zoldkabatos; 09.07.2013
comment
У меня это не работает, так как я дал вам подсказку, как вы можете манипулировать с помощью события ввода клавиши и вызывать свою функцию. Ваш код javascript выдает ошибку в браузере, если вы хотите увидеть, откройте мою скрипку -> щелкните правой кнопкой мыши -> проверьте elemet -> консоль. вы увидите ошибку - person Dhaval Marthak; 09.07.2013

измените триггер события, чтобы он читался следующим образом

<input type="text" id="search" onkeypress="if (window.event.keyCode==13) doSearch(document.getElementById('search').value)" placeholder="What are you looking for?">

я также рекомендую использовать onkeydown вместо onkeypress, потому что onkeypress не обнаруживает нажатия определенных клавиш управления.

person DevZer0    schedule 09.07.2013

Можете ли вы использовать jQuery для этого? Начинает несколько убирать код и убирает ваш javascript из поля зрения.

$('#search').keypress(function(e) {
  if (e.keyCode == '13') {
     e.preventDefault();
     doSearch(this.value);
   }
});
person Squiggs.    schedule 09.07.2013
comment
jQuery не требуется, не продавайте jQuery людям, пока он не потребуется - person Dhaval Marthak; 09.07.2013