1

我正在使用下面的三部分代码:

代码的第一部分:基本上,当用户选择 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 的值。我在这里做错了什么?

4

2 回答 2

1

在您的onsubmit处理程序中,您正在传递this.form. 但是,this已经提到了表单,因为触发submit事件的是表单本身。表单字段具有属性,但form表单本身没有属性form。因此,只需将您的处理程序更改为 passthis而不是this.form.

http://jsfiddle.net/fmqNj/

onsubmit="submitGoogle(this)"
于 2012-10-10T02:40:56.193 回答
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(form) 函数中,我改为: var searchterm=document.googleform.q.value;

但我仍然喜欢其他人评论我的解决方案,无论它在实践中是否优雅。:D

于 2012-10-10T02:32:11.367 回答