如何获取textarea的值?
这是对我之前提问的一个跟进,链接在这里:我的其他问题。我再次提问是因为这似乎更像是一个关于JavaScript的问题,而不是关于Google App Engine的问题。
我有一个表单
<form name="choice_form" id="choice_form" method="post" action="/g/choicehandler" onsubmit="writeToStorage()">
<textarea name="choice" rows="7" cols="50"></textarea><br />
<input type="submit" value="submit your choice">
</form>
我想把这个textarea
里的内容拿出来,然后用formData
发送给应用。我试过这样做
var choice = document.getElementById("choice_form").value;
但是我得到的“choice”的值是“undefined”,我哪里做错了呢?
另外,如果我理解没错的话,/g/choicehandler
这个函数被调用了两次,一次是通过表单,另一次是通过XHR(异步请求)。我该怎么解决这个问题呢?下面是处理函数的代码:
class Choice(webapp.RequestHandler):
def get(self):
self.response.out.write("""
<html>
<head>
<script type="text/javascript">
var count = 0;
function writeToStorage()
{
var user = "user" + count;
count++;
localStorage.setItem("chooser", user);
var choice = document.getElementById("choice_form").value;
var formData = new FormData();
formData.append("chooser", user);
formData.append("choice", choice);
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://localhost:8086/g/choicehandler", true);
xhr.onreadystatechange = function (aEvt) {
if (xhr.readyState == 4 && xhr.status == 200){
console.log("request 200-OK");
}
else {
console.log("connection error");
}
};
xhr.send(formData);
//added this per Aaron Dufour's answer
return 0;
};
</script>
</head>
<body>
//changed onsubmit like this: onsubmit="return writeToStorage(); as per Aaron Dufour's answer
<form name="choice_form" id="choice_form" action="/g/choicehandler" method="post" onsubmit="writeToStorage()">
<textarea name="choice" rows="7" cols="50"></textarea><br />
<input type="submit" value="submit your choice">
</form>
</body>
</html>""")
更新
请查看Aaron Dufour的回答,里面有解决方案。
4 个回答
3
你可以通过以下方式正式访问表单:
document.forms['choice_form']
或者也可以这样:
document.forms.choice_form
每个表单都有一个 elements 集合,里面包含了所有的表单控件。你可以用类似的方式访问它们:
document.forms['choice_form'].elements['choice']
或者
document.choice_form.choice
前提是这些名字符合有效的 JavaScript 标识符的规则。如果不符合,你需要使用方括号的方式:
document['choice_form']['choice']
这些方法都会返回一个名为 'choice' 的元素,前提是它在一个名为 'choice_form' 的表单中。所以要获取这个元素的值:
document.choice_form.choice.value
4
choice_form
是指整个 <form>
表单,而不是 <textarea>
文本框。
你需要给 <textarea>
设置一个 ID,然后用这个 ID 来替代。
1
正如其他人所说,你现在是在访问 form
,但你想要的数据其实是在 textarea
里。如果给 textarea
设置一个 ID,那样获取它的值会简单很多。
经过很多讨论,我们发现其实根本不需要用到 XHR。下面是你应该让表单看起来的样子:
<form name="choice_form" id="choice_form" action="/g/choicehandler" method="post" onsubmit="writeToStorage()">
<textarea name="choice" rows="7" cols="50"></textarea><br />
<input type="hidden" name="chooser" id="form_chooser" />
<input type="submit" value="submit your choice">
</form>
现在,我们使用 JavaScript 函数来编辑表单,然后再提交:
var count = 0;
function writeToStorage()
{
var user = "user" + count;
count++;
localStorage.setItem("chooser", user);
document.getElementById("form_chooser").value = user;
};