У меня есть вход, где, теоретически, пользователь вводит в поле, нажимает enter, и браузер переходит к входному тексту с добавлением.html в конце. Я изначально пытался разобраться с отправкой формы, но форма больше не отправляется после того, как я добавил preventDefault();
, То, что у меня сейчас, похоже, не задает переменную в элементе формы, а затем не попадает в часть URL. Мой код:
<form name="answerarea">
<input type="text" name="input">
</form>
тогда
function sendanswer( e ) {
if ( e.keyCode === 13 ) {
e.preventDefault();
var answer = this.document.answerarea.input.value;
if (answer) { this.location.href = answer + ".html"; }
}
}
document.answerarea.input.onkeypress = sendanswer;
Любая подсказка, почему она не работает? Благодарю.
Вы вызываете функцию в событии keypress
, поэтому this
будет относиться к входу, в котором нет объекта input
или location
.
измените свой код следующим образом:
function sendanswer( e ) {
if ( e.keyCode === 13 ) {
e.preventDefault();
var answer = document.answerarea.input.value;
if (answer) { window.location.href = answer + ".html"; }
}
}
this
ключевое слово, скорее всего, указывает на текущий элемент, который был бы поле ввода. Попробуйте это вместо этого.
function sendanswer( e ) {
if ( e.keyCode === 13 ) {
e.preventDefault();
var answer = this.value;
if (answer) {
window.href = answer + ".html";
return false;
}
}
}
document.getElementsByTagName('input')[0].addEventListener("keyup", sendanswer);
Контекст этого будет меняться в зависимости от того, как вызывается sendanswer. ex: с .apply
или .call
позволит вам изменить контекст.
См. Также http://jsfiddle.net/KtXpV/ для примера.
this.
...