I have a handler /choice with a textarea field and /choicehandler that writes the information returned to database. But before posting the form I want to write a user name to localStorage.
This is the form:
<form name="choice_form" action="/choicehandler" method="post">
<textarea name="choice" rows="7" cols="50"></textarea><br />
<input type="submit" value="submit your choice">
</form>
On click I want to assign a username to the user and write it to localStorage with writeToStorage():
<head>
<script type="text/javascript">
var count = 0;
function writeToStorage()
{
user = "user" + count;
count++;
localStorage.setItem("chooser", user);
};
</script>
</head>
What I am confused about is how to use onclick="writeToStorage()" to call the writeToStorage() and at the same time have action="/choicehandler" in the form.
What is the correct way to achieve something like this. I am working with Google App Engine (Python) and I will add the ajax call to /choicehandler later after I solve this.
As a summary, I want to write the javascript variable user to localStorage and post the textarea to /choicehandler with one click.
UPDATE
I am trying john_doe’s answer but writeToStorage() is never fired. What am I doing wrong? The full code for the handler is below:
class Choice(webapp.RequestHandler):
def get(self):
self.response.out.write("""
<html>
<head>
<script type="text/javascript">
var count = 0;
function writeToStorage()
{
alert("count: " + count);
user = "user" + count;
//this line was giving an error; now it is fixed
//alert("user: " + user and "count: " + count);
alert("user: " + user + " and count: " + count);
count++;
localStorage.setItem("chooser", user);
};
</script>
</head>
<body>
<form name="choice_form" id="choice_form" action="/choicehandler" method="post" onsubmit="writeToStorage()">
<textarea name="choice" rows="7" cols="50"></textarea><br />
<input type="submit" value="submit your choice">
</form>""")
self.response.out.write("""
</body>
</html>""")
Let your function get invoked right before the form gets submitted.