Javascript Django表单:禁用提交按钮,完成后重新启用
我有一个高度定制的投票表单,它是使用Javascript动态生成的,一旦提交,它会将您重定向到另一个页面(“投票”),该页面a)报告用户在成功提交时投票的内容,或b)报告提交失败时发生的错误。一个可能的错误是,如果投票人名称已被使用,则会指示用户选择其他名称 我的问题是,如果用户双击“提交”按钮,它将成功提交投票,但随后由于投票人名称被使用了两次(即出现了双重张贴),它将不成功地提交投票。用户最终完全跳过了“成功投票”页面,只是看起来他们原来的投票没有被统计,说这个名字已经被使用了 “我的表单”的标记如下所示:Javascript Django表单:禁用提交按钮,完成后重新启用,javascript,jquery,html,django,forms,Javascript,Jquery,Html,Django,Forms,我有一个高度定制的投票表单,它是使用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在我试用时也没有做任何事情
我需要做的是:
这里的任何指导都将不胜感激,我觉得我让事情变得比需要的更复杂。您可以在模式或浮动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)
});