JavaScript没有在this.form中获得价值

时间:2012-10-10 02:21:41

标签: javascript forms

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

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

2 个答案:

答案 0 :(得分:1)

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

http://jsfiddle.net/fmqNj/

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