如前所述,问题在于您依赖onClick
事件来触发您的javascript函数,因此需要单击。
此外,在文本字段中按“Enter”以触发表单提交的行为取决于:
- 只有一个文本字段,或者
- 一个
<input type='submit'>
(或者也许<button type='submit'>
,等等,在表格的某个地方。
(可以在此处找到有关该特定行为及其原因的更详细讨论:Form not submit when press enter)
由于表单中只有一个文本字段,因此submit
在按 Enter 时正确触发了操作;所以你需要捕获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
(这是默认的)。)
我对此做了一个工作 jsfiddle,以及其他一些更改(解释如下):
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!!!");
}
现在你有了一个框架,可以更干净、更优雅地做你想做的事情,希望这个解释有助于增加你对正在发生的事情的理解。:)