如前所述,问题在于您依赖onClick 事件来触发您的javascript函数,因此需要点击。
此外,在文本字段中按“Enter”以触发表单提交的行为取决于:
- 只有一个文本字段,或者
- 一个
<input type='submit'>(或者<button type='submit'>等,在表格的某处。
(有关该特定行为及其原因的更详细讨论可在此处找到:Form not submitting when pressing enter)
由于表单中只有一个文本字段,因此在按 Enter 时正确触发了submit 操作;那么你需要捕获表单的submit() 事件,使用它的onSubmit= 属性(或者,使用jQuery 或其他一些javascript 代码,将相同的事件处理程序添加到表单。jQuery 方式有一些优点,但在此目的上它实际上是等效的)。
<form name="enter_keyword" onSubmit="javascript:redirect(); return false;">
(我已将函数重命名为redirect(),因为看起来这就是我们正在做的事情,而不是在这里登录。此外,函数调用之后的return false; 将阻止表单实际提交任何内容,因为我们使用 javascript 函数来处理它。(没有return false;,默认情况下,表单将提交到 URI 设置为表单的 action= 属性;如果未设置,它们将提交到当前 URL . 可以使用 javascript 处理表单,然后将数据提交给服务器端处理程序,在这种情况下,它会return true(这是默认值)。)
我做了a working jsfiddle of this,以及其他一些更改(解释如下):
function redirect() {
// var done=0;
var keyword = document.enter_keyword.keyword.value;
//keyword=keyword.toLowerCase();
//alert(keyword);
var keyword_map = {
'toms': 'toms.com',
'apple': 'apple.com',
'orange': 'orange.com'
}
var protocol = document.location.protocol; // to handle https://, etc., like here on jsfiddle
if (keyword in keyword_map) {
var target_url = protocol + '//' + keyword_map[keyword];
alert("Attempting to redirect you to: " + target_url);
window.location = target_url;
} else {
alert("WARNING:Incorrect keyword you plonker!!!");
}
/*
if (keyword=="toms") { window.location = protocol + "www.toms.com"; done=1; }
if (keyword=="apple") { window.location = protocol + "www.apple.com"; done=1; }
if (keyword=="orange") { window.location= protocol + "www.orange.com"; done=1; }
if (done==0) { alert("WARNING:Incorrect keyword you plonker!!!"); }
*/
}
<form name="enter_keyword" onSubmit="javascript:redirect(); return false;">
<table border="1" cellpadding="2" cellspacing="2" bgcolor="#7B97E0">
<tr>
<td>
<font color="#ffffff"><b>Enter keyword:</b></font>
</td>
<td>
<input type=text name=keyword>
</td>
</tr>
<tr>
<td colspan=2 align=center>
<input type=submit value="Go!">
</td>
</tr>
</table>
</form>
为什么不为每个案例硬编码if (keyword="keyword") { window.location = "location"; done=1; },而不是制作一个字典映射(技术上是javascript中的一个对象,但是哦)将所有可用的关键字映射到url? :
var keyword_map = {
'toms': 'toms.com',
'apple': 'apple.com',
'orange': 'orange.com'
};
那么,不用在开始时设置done=0,在每个分支中设置done=1,并在最后检查,我们可以这样做:
if (keyword in keyword_map) {
// redirect to keyword_map[keyword]
} else {
alert("WARNING:Incorrect keyword you plonker!!!");
}
而不是为每个位置键入http://www.,只需存储基本 url,然后每次应用协议。
因此,即使在以 https:// 提供服务的网站上(例如,jsfiddle,如果您已登录),这也可以工作,我们可以检查当前页面的协议,并在前面添加:
var protocol = document.location.protocol; // to handle https://, etc., like here on jsfiddle
if (keyword in keyword_map) {
var target_url = protocol + '//' + keyword_map[keyword];
alert("Attempting to redirect you to: " + target_url);
window.location = target_url;
} else {
alert("WARNING:Incorrect keyword you plonker!!!");
}
现在您有了一个框架,可以更简洁、更优雅地完成您想要做的事情,希望这个解释有助于增加您对正在发生的事情的理解。 :)