如何在下拉列表中验证我的其他选项?

时间:2016-10-02 13:32:39

标签: php laravel validation input dropdown

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

<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 个答案:

答案 0 :(得分: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">