Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Django表单:禁用提交按钮,完成后重新启用_Javascript_Jquery_Html_Django_Forms - Fatal编程技术网

Javascript Django表单:禁用提交按钮,完成后重新启用

Javascript Django表单:禁用提交按钮,完成后重新启用,javascript,jquery,html,django,forms,Javascript,Jquery,Html,Django,Forms,我有一个高度定制的投票表单,它是使用Javascript动态生成的,一旦提交,它会将您重定向到另一个页面(“投票”),该页面a)报告用户在成功提交时投票的内容,或b)报告提交失败时发生的错误。一个可能的错误是,如果投票人名称已被使用,则会指示用户选择其他名称 我的问题是,如果用户双击“提交”按钮,它将成功提交投票,但随后由于投票人名称被使用了两次(即出现了双重张贴),它将不成功地提交投票。用户最终完全跳过了“成功投票”页面,只是看起来他们原来的投票没有被统计,说这个名字已经被使用了 “我的表单”

我有一个高度定制的投票表单,它是使用Javascript动态生成的,一旦提交,它会将您重定向到另一个页面(“投票”),该页面a)报告用户在成功提交时投票的内容,或b)报告提交失败时发生的错误。一个可能的错误是,如果投票人名称已被使用,则会指示用户选择其他名称

我的问题是,如果用户双击“提交”按钮,它将成功提交投票,但随后由于投票人名称被使用了两次(即出现了双重张贴),它将不成功地提交投票。用户最终完全跳过了“成功投票”页面,只是看起来他们原来的投票没有被统计,说这个名字已经被使用了

“我的表单”的标记如下所示:

<form id="formVote" name="formVote" action="{% url 'surveys:voted' survey.id %}" method="POST">
<form id="formVote" name="formVote" action="" method="POST">
这在某种程度上是可行的,但当它完成时,实际上并不会将用户重定向到“投票”页面。。。它成功地提交了投票(如果有错误,则不提交),并且在完成后只保留在投票表单页面上,用户对所发生的事情没有任何反馈,尽管views.py voted view返回了一个呈现:

return render(request, 'surveys/voted.html', {
            'error_message': error_message,
            'voter_name': voter_name,
            'ranking_id_array_final': ranking_id_array_final,
            'survey_id': survey_id,
            'survey_opened': survey_opened,
        })
同样,HttpResponseRedirect在我试用时也没有做任何事情

我需要做的是:

  • “提交”按钮已禁用
  • 提交POST请求
  • “投票”页面已加载
  • 如果用户按下按钮,提交按钮将重新启用() 返回按钮以提交另一次投票

  • 这里的任何指导都将不胜感激,我觉得我让事情变得比需要的更复杂。

    您可以在模式或浮动div中显示
    数据
    变量内容,以显示用户发生了什么。该变量保存模板的呈现html(使用其所有逻辑和传递给它的所有参数)
    也许你可以用它来完成这个任务
    脚本应该是

    $.post('{% url 'surveys:voted' survey.id %}', $(this).serialize(), function(data){
        document.getElementById('submit_vote_button').disabled = false;
        $( "#dialog-message" ).dialog({
              modal: true,
              buttons: {
                Ok: function() {
                  $( this ).dialog( "close" );
                }
              }
            });
         $( "#dialog-message" ).html(data) //here goes your data var (rendered html from your django template)
    });
    

    嗯,试过了,而且“html:data”似乎不适用于JQuery对话框(我注意到它不在API文档中的任何地方)。我得到的是一个空白的模式弹出窗口。编辑:显示$(“#对话框消息”).html(数据);但这仍然不是我想要的工作方式。不过谢谢你的灵感,我会把它放在口袋里作为备用计划。我加了你的零钱,你想用哪种方式工作?您可以编写自己的关闭函数来禁用复选框并执行一些操作。我们希望能够完成步骤1-4,其中步骤3实际上会将您带到一个完全不同的页面,但这甚至可能不可行。我想我会放弃,完全重新设计。不过我还是支持你的答案,谢谢。
    $.post('{% url 'surveys:voted' survey.id %}', $(this).serialize(), function(data){
        document.getElementById('submit_vote_button').disabled = false;
        $( "#dialog-message" ).dialog({
              modal: true,
              buttons: {
                Ok: function() {
                  $( this ).dialog( "close" );
                }
              }
            });
         $( "#dialog-message" ).html(data) //here goes your data var (rendered html from your django template)
    });