Laravel 8 - 如何在 `validate()` 刷新后保持 radio "checked" 字段可见?
Laravel 8 - how to keep radio "checked" fields visible after `validate()` refresh?
我有一个表格,上面写着“这个箱子有 IR 号码吗?”
如果是,请显示字段。如果没有,隐藏并显示给其他人。
我正在使用
validate()
函数。
old()
在表单提交失败后保留数据,也就是 validate()
错误消息。
- JQuery show/hide 字段。
对于无线电输入,我使用了 old()
这样的:
<input class="btn-check" type="radio" name="checkIR" value="haveIR" @if(!old('checkIR')) checked @endif id="haveIR" required>
<input class="btn-check" type="radio" name="checkIR" value="noIR" @if(old('checkIR')) checked @endif id="noIR">
在失败 validate()
后保持 checked
不变,但它有问题,当我选中“是”并刷新时,它会在必须为“是”时选中“否” .
至于 show/hide,这是我所做的:
// Show/Hide fields based on radio button option
$(document).ready(function() {
$('input[name="checkIR"]').click(function() {
var inputValue = $(this).attr("value")
var targetField = $("." + inputValue);
$(".box").not(targetField).slideUp();
$(targetField).slideDown();
});
});
在css的帮助下:
.box {
display: none;
}
代码的工作原理:
如果选中 yes/haveIR
无线电:显示包含 class="box haveIR"
的所有字段
试图解决的问题:
- 如何fix/improve输入中的小错误
old()
?
- 如果用户选择“是”,如何在失败后保持
yes
字段可见 laravel validate()
?
由于无线电输入具有相同的名称,在这两种情况下,您的会话都有“checkIR”,当您尝试使用 old('checkIR')
检查它时,无论其值如何,它都会 return 为真。这就是选中“否”的原因。
因此,为了找到旧的选择,您应该检查它的值,而不是它是否存在于会话中。
这样的代码应该适合您;
<input class="btn-check" type="radio" name="checkIR" value="haveIR" @if(old('checkIR') == 'haveIR') checked @endif id="haveIR" required>
<input class="btn-check" type="radio" name="checkIR" value="noIR" @if(old('checkIR') == 'noIR') checked @endif id="noIR">
或者;
您可以使用 0 和 1 作为值。由于 old('checkIR') 将 return '0' 或 '1' 并且 PHP 会将 '0' 解释为 false 并将 '1' 解释为 true 行为将如您所愿。
并保持相关字段可见;
您可以 运行 在文档准备好时编写一些脚本,并根据输入值设置相关字段可见。
$(document).ready(function() {
var input = $('input[name="checkIR"]:checked');
if (input) { // if any checked radio when document ready
var targetField = $("." + input.val());
$(".box").not(targetField).slideUp();
$(targetField).slideDown();
}
});
注意:没有 运行 脚本,它可能有错误,但你明白了。
我有一个表格,上面写着“这个箱子有 IR 号码吗?”
如果是,请显示字段。如果没有,隐藏并显示给其他人。
我正在使用
validate()
函数。old()
在表单提交失败后保留数据,也就是validate()
错误消息。- JQuery show/hide 字段。
对于无线电输入,我使用了 old()
这样的:
<input class="btn-check" type="radio" name="checkIR" value="haveIR" @if(!old('checkIR')) checked @endif id="haveIR" required>
<input class="btn-check" type="radio" name="checkIR" value="noIR" @if(old('checkIR')) checked @endif id="noIR">
在失败 validate()
后保持 checked
不变,但它有问题,当我选中“是”并刷新时,它会在必须为“是”时选中“否” .
至于 show/hide,这是我所做的:
// Show/Hide fields based on radio button option
$(document).ready(function() {
$('input[name="checkIR"]').click(function() {
var inputValue = $(this).attr("value")
var targetField = $("." + inputValue);
$(".box").not(targetField).slideUp();
$(targetField).slideDown();
});
});
在css的帮助下:
.box {
display: none;
}
代码的工作原理:
如果选中 yes/haveIR
无线电:显示包含 class="box haveIR"
试图解决的问题:
- 如何fix/improve输入中的小错误
old()
? - 如果用户选择“是”,如何在失败后保持
yes
字段可见 laravelvalidate()
?
由于无线电输入具有相同的名称,在这两种情况下,您的会话都有“checkIR”,当您尝试使用 old('checkIR')
检查它时,无论其值如何,它都会 return 为真。这就是选中“否”的原因。
因此,为了找到旧的选择,您应该检查它的值,而不是它是否存在于会话中。
这样的代码应该适合您;
<input class="btn-check" type="radio" name="checkIR" value="haveIR" @if(old('checkIR') == 'haveIR') checked @endif id="haveIR" required>
<input class="btn-check" type="radio" name="checkIR" value="noIR" @if(old('checkIR') == 'noIR') checked @endif id="noIR">
或者;
您可以使用 0 和 1 作为值。由于 old('checkIR') 将 return '0' 或 '1' 并且 PHP 会将 '0' 解释为 false 并将 '1' 解释为 true 行为将如您所愿。
并保持相关字段可见;
您可以 运行 在文档准备好时编写一些脚本,并根据输入值设置相关字段可见。
$(document).ready(function() {
var input = $('input[name="checkIR"]:checked');
if (input) { // if any checked radio when document ready
var targetField = $("." + input.val());
$(".box").not(targetField).slideUp();
$(targetField).slideDown();
}
});
注意:没有 运行 脚本,它可能有错误,但你明白了。