我有一个输入,理论上,用户在框中键入,按回车键,浏览器导航到输入文本,末尾附加.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;
任何线索为什么它不起作用?感谢。
答案 0 :(得分:2)
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的调用方式而变化。例如:使用.apply
或.call
将允许您更改上下文。
另请参阅http://jsfiddle.net/KtXpV/示例。
答案 1 :(得分:0)
您正在调用输入的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"; }
}
}