Как написать в localStorage и опубликовать текстовое поле одним щелчком мыши? - PullRequest
0 голосов
/ 13 ноября 2011

У меня есть обработчик /choice с полем textarea и /choicehandler, который записывает информацию, возвращаемую в базу данных. Но перед отправкой формы я хочу написать имя пользователя в localStorage.

Это форма:

<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>

При нажатии я хочу назначить имя пользователя и записать его в localStorage с помощью writeToStorage():

<head>
<script type="text/javascript">

var count = 0;

function writeToStorage()
{ 
    user = "user" + count;
    count++;
    localStorage.setItem("chooser", user);
};

</script>
</head>

Что меня смущает, так это то, как использовать onclick="writeToStorage()" для вызова writeToStorage() и в то же время иметь action="/choicehandler" в форме.

Как правильно достичь чего-то подобного. Я работаю с Google App Engine (Python) и добавлю вызов ajax к /choicehandler позже, когда решу эту проблему.

В качестве резюме я хочу записать переменную javascript user в localStorage и post текстовое поле в /choicehandler одним щелчком мыши.

UPDATE

Я пытаюсь john_doe ответить , но writeToStorage() никогда не запускается. Что я делаю неправильно? Полный код для обработчика ниже:

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>""")

Ответы [ 2 ]

1 голос
/ 13 ноября 2011

Пусть ваша функция будет вызвана непосредственно перед отправкой формы.

<form name="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>
1 голос
/ 13 ноября 2011

Вы можете немного изменить свою функцию (множество способов сделать это).Добавьте идентификатор в форму (id = "choice_form"), затем добавьте строку, которая отправляет форму:

function writeToStorage() {      
    user = "user" + count;     
    count++;    
    localStorage.setItem("chooser", user); 
    document.getElementById("choice_form").submit();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...