我试图找出修改隐藏的django表单字段的最佳方法。或者,即使有可能。我有HTML设置来完成此任务,并且运行良好。但是,为了防止多次提交,我不得不更改HTML,现在我无法弄清楚如何通过HTML按钮传递值,具体取决于用户单击的内容。
以前,我有两个按钮,定义如下:
<button type="submit" class="button1" name="status" value="Saved"><h3 class="txtalgn4">Save</h3></button>
<button type="submit" class="button2" name="status" value="Submitted"><h3 class="txtalgn4">Submit</h3></button>
如上所述,这非常适合将值传递给模型的属性。状态值已按预期保存,具体取决于用户单击了哪个按钮。
现在,为了响应我今天打开的这个问题,我将按钮更新为
type="button"
... How To Prevent Double Submit With Form Validation我尝试使用以下代码:
<button type="button" class="button1" name="status" value="Saved"><h3 class="txtalgn4">Save</h3></button>
<button type="button" class="button2" name="status" value="Submitted"><h3 class="txtalgn4">Submit</h3></button>
然后,我还将HTML中的状态字段更改为
{{ status.as_hidden }}
以获取值。仅当我在数据库结构中对状态值进行硬编码时,此方法才有效。我需要能够根据用户单击的内容动态获取此值。 JQuery with Ajax是否是正确的方法?是否有一些简单的方法可以根据用户单击的按钮来修改隐藏字段?是否有一些更好的方法可以尝试以隐藏方式获取此字段?如上所述,使用
type="submit"
的HTML方式可以很好地工作,但是在我试图防止用户重复提交表单时引起了问题。就像编程一样,我解决了一个问题并创建了另一个问题。预先感谢您的任何想法。
最佳答案
像以前一样继续使用两个提交按钮。但是,如果禁用了整个表单,则一旦提交,就可以禁用整个表单,而不是禁用按钮。
首先,给您的表单一个唯一的html ID。
<form id="myform">
...
</form>
<!-- JS code -->
<script type="text/javascript">
$('#myform').on('submit', function(e) {
if ($(this).hasClass('submitted')) {
// prevent submission
e.preventDefault();
return;
}
$(this).addClass('submitted');
});
</script>