如何验证下拉列表中的“其他”选项?

Posted

技术标签:

【中文标题】如何验证下拉列表中的“其他”选项?【英文标题】:How can I validate my Other option in dropdown list? 【发布时间】:2017-02-10 13:37:42 【问题描述】:

如何验证我在 Laravel 4.2 中的其他 输入字段,该字段在 下拉 列表中选择 Other 选项后出现?我的下拉列表中的值已经是必需的,现在我想在我的输入字段上应用相同的验证逻辑和错误,以便两者都是必需!通过满足下拉列表中的第一个验证规则,输入字段中的第二个验证规则会输出错误!解决这个问题的最简单方法是什么!

<div class="row">

                    <div class="col-lg-6 col-sm-6 col-md-6">



            <script type="text/javascript">
                function showfield(name)
                        if(name=='Other')document.getElementById('div1').innerhtml='<input class="custom-input" placeholder="Roles" style="margin-left: 32px;" name="roles" type="text" value/>';

                        else document.getElementById('div1').innerHTML='';
                    
            </script>



                <select id="otherField" name="role" onchange="showfield(this.options[this.selectedIndex].value)">
                    <option value="" selected="selected">Select role</option>
                    <option value="UI/UX designers">UI/UX designers</option>
                    <option value="QA engineers">QA engineers</option>
                    <option value="Developer">Developer</option>
                    <option value="Scrum Master">Scrum Master</option>
                    <option value="CEO">CEO</option>
                    <option value="Director">Director</option>
                    <option value="Other">Other</option>
                </select>
                    <div id="div1" class="row">
                           <div class="col-lg-6 col-sm-6 col-md-6"></div>
                    </div>
                    <div class="col-md-6">
                                                        @if($errors->first('roles') )
                                                            <div class="fe-form-error">
                                                                <div class="icon"></div>
                                                                 $errors->first('roles') 
                                                            </div>
                                                        @endif
                                                        </div>

                    </div>

                                                        <div class="col-md-6">
                                                        @if($errors->first('role') )
                                                            <div class="fe-form-error">
                                                                <div class="icon"></div>
                                                                 $errors->first('role') 
                                                            </div>
                                                        @endif
                                                        </div>

            </div>

我的类有验证规则:

class OnEventRegistration extends AbstractValidator 

    protected $customRules = false;

    protected $rules = array(
        'email'             =>      'required|email|unique:users',
        'password'          =>      'required|min:8|confirmed',
        'first_name'        =>      'required',
        'last_name'         =>      'required',
        'role'              =>      'required',
        'roles'             =>      'required',

    );

【问题讨论】:

【参考方案1】:

您需要使用required_if。

protected $rules = array(
    'email'             =>      'required|email|unique:users',
    'password'          =>      'required|min:8|confirmed',
    'first_name'        =>      'required',
    'last_name'         =>      'required',
    'role'              =>      'required',
    // This says required only if role = 'Other'
    'roles'             =>      'required_if:role,Other',
);

您可能还需要另一种方法来有条件地显示您的 roles 输入,以便它实际上被识别为表单中 DOM 的一部分。

<script>
function showfield(el) 
if (el.value == 'Other') 
    document.getElementById('roles').style.display = 'block';
 else 
    document.getElementById('roles').style.display = 'none';

</script>

<select id="otherField" name="role" onchange="showfield(this)">
    <!-- options -->
</select>

<input id="roles" style="display: none; margin-left: 32px;" name="roles" type="text" placeholder="Roles" class="custom-input">

【讨论】:

已经试过了,我得到了一个 SQLSTATE[23000]:违反完整性约束:1048 列“角色”不能为空 这与上述任何代码都没有关系,但要解决这个问题,您需要更改数据库中的roles 列以允许为空。如果这是通过迁移创建的,则:$table-&gt;string('roles')-&gt;nullable(); 或在 SQL 中:***.com/questions/212939/… 在 mysql 中,列默认可以为空。在使用内置迁移的 Laravel 中,您需要指定哪些可以为空。 工作!!非常感谢您的努力!欣赏它。 很高兴我能帮上忙。

以上是关于如何验证下拉列表中的“其他”选项?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据Angular 6同一行中的其他单元格值在AG-Grid选择下拉列表中加载不同的选项?

下拉列表内容怎么设置?

asp.net mvc jquery 下拉验证

如何使用量角器逐一选择下拉列表中的所有值

在 Django 中,根据模型中其他字段中选择的值删除选择字段下拉列表中的选项

如何使用 jQuery 或 Javascript 从其他下拉列表中显示/隐藏相同的选项