如何在需要时仅提交隐藏/显示字段数据之一 - Laravel

Posted

技术标签:

【中文标题】如何在需要时仅提交隐藏/显示字段数据之一 - Laravel【英文标题】:How to submit only one of hide/show fields data when required - Laravel 【发布时间】:2019-12-30 16:26:47 【问题描述】:

一个表单包含多个字段。一个字段是“是/否”下拉菜单。选择是时,会出现另一个下拉菜单。当没有选择时,会出现一个文本输入字段。 根据是/否下拉列表,应将字段数据之一提交到数据库。

但是,这两个字段的数据都会发送到数据库。但是数据库需要一个字符串,现在它得到一个数组。可以提交数据。 应该采取什么措施来防止这种情况发生,因此只有来自显示字段的数据会通过控制器而不是来自当时隐藏字段的数据?

注意:必须填写1个字段(下拉菜单的输入)。

jQuery
    window.onload = function() 
            document.getElementById('ifYes').style.display = 'none';
            document.getElementById('ifNo').style.display = 'none';
    
    function hideShow() 
        var D = document.getElementById("yesno")
        var Y = document.getElementById('isYes')
        var N = document.getElementById('isNo')
            if (D.selected) 
            if (D.value == "yes")
                    Y.style.display = 'block';
                N.style.display = 'none';
                Y.required = true;
            
            else
                    N.style.display = 'block';
                Y.style.display = 'none';
                N.required = true;
                 
        
    
html
<div class="row">
    <div class="col-6"> 
          <select name="agree" class="form-control" onchange="hideShow();" id="yesno" required>
<option></option>
              <option id="yes">Yes</option>
              <option id="no">No</option>
          </select>
    </div> 
    <div class="col-6">
           <select name="type" class="form-control" id="ifYes">
                    <option>Option 1</option>
                    <option>Option 2</option>
                    <option>Option 3</option>
            </select>
            <input type="text" id="ifNo" class="form-control input-text" name="type">
     </div>
</div> 
<div class="row">
    <button type="submit" class="btn btn-primary btn-block" style="margin: 10px;">New</button>
</div>

【问题讨论】:

所以禁用未显示的字段。禁用的字段不会发回。 谢谢,我试试看 【参考方案1】:

在我的控制器中,我已经对机构进行了验证,说需要。现在,我删除它。通过调整 javascript 代码,错误消失了。

$this->validate($request, [
            'institute'             => 'min:2', 
            ...
]); 

$project = new Project();
...
$project->type = request('type');
...
$project->save();

Javascript 添加禁用字段

    function hideShow() 

        var x = document.getElementById('YesNo');
        var r = x.options[x.selectedIndex].value;
        var y = document.getElementById("ifyes");
        var n = document.getElementById("ifno");
        if ( r == "Yes")
            y.style.display = "block";
            n.style.display = "none";
            y.disabled = false;
            n.disabled = true;
        y.required = true;
        n.required = false;
        
        else if ( r == "No") 
            y.disabled = true;
            n.disabled = false;
            y.style.display = "none";
            n.style.display = "block";
        y.required = false;
        n.required = true;
         else
            y.disabled = true;
            n.disabled = true;
            y.style.display = "none";
            n.style.display = "none";
        y.required = false;
        n.required = true;
        
    

【讨论】:

谢谢。事实上,当一个字段被禁用时,数据不会被提交。

以上是关于如何在需要时仅提交隐藏/显示字段数据之一 - Laravel的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中显示带有提交按钮和隐藏输入字段的html表单

在提交 IFRAME 表单之前,将父 url 保存到隐藏字段

如何在隐藏控件时仅捕获 MPMoviePlayerController 视图上的单击/点击?

Excle数据透视如何隐藏数据透视表字段的分类汇总

如何使用 jQuery 重新填充表单提交时隐藏的 CSV 字段

通过作为隐藏输入字段提交的会话 ID 获取 HttpSession