我有一个输入,理论上,用户在一个框中输入,按回车键,浏览器导航到末尾附加了.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;
知道为什么不工作吗?谢谢。
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
将允许您更改上下文。
您正在调用输入的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"; }
}
}