Flask-POST请求正在发送部分输入值

时间:2020-11-12 16:22:49

标签: javascript python flask jinja2

我目前正在用Python / Flask和一些Javascript做一个小游戏,但是当我提交表单时,我只能收到一些值,而其他值不存在:

这是我的表格:

<form name="question_form" id="question_form" action="{{ url_for('question') }} " method='POST' onsubmit="return validateAnswer()">
            <p class="question">{{ question }}</p>
            <button name="given_answerA" type="submit" class="clickable" id="questions_A" value="{{ answers[0] }}">{{ answers[0] }}</button>
            <button name="given_answerB" type="submit" class="clickable" id="questions_B" value="{{ answers[1] }}">{{ answers[1] }}</button>
            <button name="given_answerC" type="submit" class="clickable" id="questions_C" value="{{ answers[2] }}">{{ answers[2] }}</button>
            <button name="given_answerD" type="submit" class="clickable" id="questions_D" value="{{ answers[3] }}">{{ answers[3] }}</button>
            <input name="nb_question" id="nb_question" type="hidden" value="{{ nb }}"/>
            <input name="choice_good" id="choice_good" type="hidden" value="{{ choice_good }}"/>
        </form>

在我的烧瓶APP中,这就是我要做的:

answered = request.form.get('given_answerA')
correct_answer = request.form.get('choice_good')
nb_question = int(request.form.get('nb_question')

我得到了“ correct_answer”和“ nb_question”的结果,但是给定_answerA不存在,我尝试打印request.form以查看内容,而我仅看到choice_good和nb_question的值。

我试图用相同的名称重命名所有按钮,更改为“ button type = submit”“ input type = submit”,但似乎它们都不起作用..

有什么想法吗?谢谢!

编辑:看来JS函数(我忘记包括的是问题)在这里:

function validateAnswer() {
    var answered = document.activeElement.id;
    var audio = document.getElementById("audio_validate");
    var form = document.getElementById("question_form");
    var background_audio = document.getElementById("background_audio");
    var body = document.getElementsByTagName('body')[0];
    var filename = 'static/images/background_' + answered + ".jpg";
    body.style.backgroundImage = 'url('+filename+')';
    background_audio.pause();
    audio.play();
    setTimeout(function(){
        form.submit();
    }, 20000);
        return false;

如果我始终返回false,则按钮为空(因此,我认为它是在不知道单击按钮的情况下使用JS提交的) 如果我保持true,则不会执行超时,也不会暂停播放音乐,但会发送post值;我需要这个“ 20”秒的延迟才能正确播放音乐并暂停播放,因为这是一个想成为百万富翁游戏的人

1 个答案:

答案 0 :(得分:0)

您的JS函数拦截了Submit事件(该事件包含有关单击了哪个按钮的数据)并手动调用form.submit,这就是为什么不发送按钮值的原因。

解决此问题的简单方法是添加另一个隐藏字段,您可以将其设置为从JS函数按下的按钮的值。

相关问题