我使用下面的三部分代码:
代码的第一部分:基本上当用户选择Google时会触发javascript函数changeSearchEngine。
<p id="searchbox">This paragraph will change once javascript is triggered</p>
<form align=right>
<select name="searchengine" onchange="changeSearchEngine(this.form)">
<option value="google">Google</option>
</select>
</form>
这是我在javascript中的changeSearchEngine函数。
function changeSearchEngine(form)
{
var searchEngine=form.searchengine.value;
if (searchEngine=="google")
{
var url_google='<form method="get" action="http://www.google.com/search" onsubmit="submitGoogle(this.form)" target="_blank"><input type="text" name="q" size="31" maxlength="255" value="" /><input type="submit" value="Google Search"/></form>';
document.getElementById("searchbox").innerHTML=url_google;
}
}
此时此刻,一切运作良好。当我选择Google时,会显示Google的搜索框。我可以搜索一切。
注意有一个onsubmit =“submitGoogle(this.form)”对吗?我需要将用户搜索术语保存到SQL表中。所以我在下面有这个javascript函数来捕获用户的类型:
function submitGoogle(form)
{
alert("Inside submitGoogle function");
var searchterm=form.q.value;
alert(searchterm); //to test. this part didnt capture the value.
}
我设法调用了submitGoogle函数,但是尽管使用了searchterm = form.q.value,我无法检索q的值。我在这里做错了什么?
答案 0 :(得分:1)
在onsubmit
处理程序中,您正在传递this.form
。但是,this
已经引用了表单,因为表单本身会触发submit
事件。表单字段具有form
属性,但表单本身不具有form
属性。因此,只需将处理程序更改为this
而不是this.form
。
onsubmit="submitGoogle(this)"
答案 1 :(得分:0)
好的,我找到了一个可能的解决方案。让我回答我自己的问题。
在changeSearchEngine(form)函数中,我改为:
var url_google='<form method="get" name="googleform" action="http://www.google.com/search" onsubmit="submitGoogle(this.form)" target="_blank"><input type="text" name="q" size="31" maxlength="255" value="hello" /><input type="submit" value="Google Search"/></form>';
在submitGoogle(表单)功能中,我更改为: var searchterm = document.googleform.q.value;
但是我仍然希望其他人对我的解决方案发表评论,不论它在实践中是不优雅还是不优雅。 :d