Laravel 8 - 如何在 `validate()` 刷新后保持 radio "checked" 字段可见?

Laravel 8 - how to keep radio "checked" fields visible after `validate()` refresh?

我有一个表格,上面写着“这个箱子有 IR 号码吗?”
如果是,请显示字段。如果没有,隐藏并显示给其他人。

我正在使用

对于无线电输入,我使用了 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"

的所有字段

试图解决的问题:

由于无线电输入具有相同的名称,在这两种情况下,您的会话都有“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();
    }
});

注意:没有 运行 脚本,它可能有错误,但你明白了。