我正在做一个Django项目,其中一个表单不会提交。我发现罪魁祸首是一些JavaScript,它格式化了货币输入(当我移除JS或移除输入type=“currency”
时,它提交)
这是我的简化表单--JS来自html5货币/货币输入
js lang-js prettyprint-override">var currencyInput = document.querySelector('input[type="currency"]')
var currency = 'GBP'
// format inital value
onBlur({
target: currencyInput
})
// bind event listeners
currencyInput.addEventListener('focus', onFocus)
currencyInput.addEventListener('blur', onBlur)
function localStringToNumber(s) {
return Number(String(s).replace(/[^0-9.-]+/g, ""))
}
function onFocus(e) {
var value = e.target.value;
e.target.value = value ? localStringToNumber(value) : ''
}
function onBlur(e) {
var value = e.target.value
var options = {
maximumFractionDigits: 2,
currency: currency,
style: "currency",
currencyDisplay: "symbol"
}
e.target.value = value ?
localStringToNumber(value).toLocaleString(undefined, options) :
''
}
<form action="{% url 'create_goal' %}" method="post">
<h4 class="mb-3" id="create">Create a Savings Goal</h4>
<input type="text" class="form-control" id="goalName" name="goalName" value="" required>
<input type="currency" min="0" pattern="^\d*(\.\d{0,2})?$" class="form-control" id="goal" name="goal" required>
<button type="submit" class="btn btn-secondary btn-block">Add Goal</button>
</form>
您需要,并且您有
模式=“^\d*(\.\d{0,2})?$”
您的货币代码破坏了模式并停止提交,因为HTML5验证对修改后的值失败
所以
var currencyInput = document.querySelector('input[type="currency"]')
var currency = 'GBP'
// format inital value
onBlur({
target: currencyInput
})
// bind event listeners
currencyInput.addEventListener('focus', onFocus)
currencyInput.addEventListener('blur', onBlur)
function localStringToNumber(s) {
return Number(String(s).replace(/[^0-9.-]+/g, ""))
}
function onFocus(e) {
var value = e.target.value;
e.target.value = value ? localStringToNumber(value) : ''
}
function onBlur(e) {
const tgt = e.target;
var value = tgt.value
if (isNaN(value))
tgt.setCustomValidity('Please enter a valid amount');
else
tgt.setCustomValidity('');
var options = {
maximumFractionDigits: 2,
currency: currency,
style: "currency",
currencyDisplay: "symbol"
}
e.target.value = value ?
localStringToNumber(value).toLocaleString(undefined, options) :
''
}
<form action="{% url 'create_goal' %}" method="post">
<h4 class="mb-3" id="create">Create a Savings Goal</h4>
<input type="text" class="form-control" id="goalName" name="goalName" value="" required>
<input type="currency" min="0" class="form-control" id="goal" name="goal" required>
<button type="submit" class="btn btn-secondary btn-block">Add Goal</button>
</form>
问题内容: 我一直在尝试React。在我的实验中,我正在使用Reactstrap框架。当我单击按钮时,我注意到HTML表单已提交。有没有一种方法可以防止单击按钮时提交表单? 我在这里重新创建了我的问题。我的表单很基本,看起来像这样: 我想念什么? 问题答案: 我认为首先要注意的是,如果没有javascript(纯HTML),则在单击或时会提交元素。在javascript中,您可以通过使用事件处理程
我有一个表单,其中某个地方有一个提交按钮。 然而,我想以某种方式‘捕获’提交事件并防止它发生。 有什么办法我能做到这一点吗? 我不能修改submit按钮,因为它是自定义控件的一部分。
问题内容: 在下一页中,使用Firefox的“删除”按钮提交表单,但“添加”按钮不提交。如何防止“删除”按钮提交表单? 问题答案: 你正在使用HTML5按钮元素。请记住,原因是此按钮具有默认的提交行为,如W3规范所述,如此处所示: W3C HTML5按钮 因此,你需要明确指定其类型: 为了覆盖默认的提交类型。我只想指出发生这种情况的原因=)
问题内容: 我的表单需要服务器处理一些时间。我需要确保用户等待并且不会再次单击按钮来尝试重新提交表单。我尝试使用以下jQuery代码: 当我在Firefox中尝试此操作时,所有功能都被禁用,但是该表单未与应该包含的任何POST数据一起提交。我不能使用jQuery提交表单,因为我需要将按钮与表单一起提交,因为有多个提交按钮,并且我确定POST中包含哪个值使用了哪个按钮。我需要像平常一样提交表单,并且
1、通过JavaScript屏蔽提交按钮(不推荐) 2、给数据库增加唯一键约束(简单粗暴) 3、利用Session防止表单重复提交(推荐) 4、使用AOP自定义切入实现
本文向大家介绍一个JavaScript防止表单重复提交的实例,包括了一个JavaScript防止表单重复提交的实例的使用技巧和注意事项,需要的朋友参考一下