javascript - 如果用户从浏览器返回时具有值,如何启用默认禁用的输入
问题描述
我正在开发一个用于在活动中购买门票的 laravel 应用程序。我默认禁用了 2 个输入框,默认情况下也禁用了 2 个复选框。您首先需要选中至少一个允许输入框输入的复选框,然后您可以通过按下按钮并发出发布请求来继续下一步。问题是:
如果有人决定从浏览器按下后退按钮(在提交 post 请求之后),复选框仍处于选中状态,但输入框仍处于禁用状态,这意味着它的值将为 null(它存储之前的输入)。
这是提交后没有再次刷新就返回的表单
如果用户在最终屏幕截图中提交表单,他将收到错误消息,因为在禁用框中输入但已选中该框。当我尝试读取输入因为它被检查时,我会得到空值。
<div class="input-group mb-3">
<div class="input-group-prepend">
<div class="input-group-text">
<input type="checkbox" name="2_box" id="2_box">
</div>
<div class="input-group-text">
Jeton 2 €
</div>
{{--<div class="input-group-text">--}}
{{--Total: <span id="total_2" class="sum"></span>--}}
{{--</div>--}}
</div>
<input type="text" class="form-control" placeholder="Cantitate" name="2_amount" id="2_amount" disabled>
<div class="input-group-append">
<div class="input-group-text">
Total: <span id="total_2" class="sum"></span>
</div>
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<div class="input-group-text">
<input type="checkbox" name="10_box" id="10_box">
</div>
<div class="input-group-text">
Jeton 10€
</div>
</div>
<input type="text" class="form-control" placeholder="Cantitate" name="10_amount" id="10_amount" disabled>
<div class="input-group-append">
<div class="input-group-text">
Total: <span id="total_10" class="sum"></span>
</div>
</div>
</div>
</div>
<script>
document.getElementById('2_box').onchange = function() {
document.getElementById('2_amount').disabled = !this.checked;
};
document.getElementById('10_box').onchange = function() {
document.getElementById('10_amount').disabled = !this.checked;
};
jQuery(document).ready(function(){
jQuery('#2_amount').change(function(){
var total = 0;
jQuery('#2_amount').each(function(){
if(jQuery(this).val() != ''){
total = parseInt(jQuery(this).val()) * 2;
}
});
jQuery('#total_2').html(total);
});
});
jQuery(document).ready(function(){
jQuery('#10_amount').change(function(){
var total = 0;
jQuery('#10_amount').each(function(){
if(jQuery(this).val() != ''){
total = parseInt(jQuery(this).val()) * 10;
}
});
jQuery('#total_10').html(total);
});
});
解决方案
你可以使用 Laravel旧输入法。它是专门为保存请求之间的信息而创建的。因此,例如,如果表单失败。
但是,考虑到您的情况,您基本上只需要阅读old
应该触发复选框并启用/禁用它的输入。
推荐阅读
- command-line - 无法在命令行上使用 zsh 作为 shell 传递 Python 列表
- excel - 加载到表时,如何让 Excel 保留电源查询中的数据类型?
- javascript - 如何在 JavaScript 测验中包含图像?
- pyqt5 - QGraphicsPixmapItem 没有正确旋转
- linux - 无法理解错误:mov rax, qword [rbp-24 - rbx * 8] 上的有效地址无效
- python - 改进搜索回文的脚本
- oracle - Oracle - 将插入/更新/删除/执行授予公共角色是一种糟糕的安全做法吗?
- arrays - 链表与数组:物理内存中哪个更连续?
- ruby - Eclipse 的动态语言工具包是否支持 Ruby 关键字参数?
- django - 将模型实例从一个模型复制到另一个模型