Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 欧芹自定义验证器,用于选择选择选项_Javascript_Jquery_Coffeescript_Parsley.js_Custom Validators - Fatal编程技术网

Javascript 欧芹自定义验证器,用于选择选择选项

Javascript 欧芹自定义验证器,用于选择选择选项,javascript,jquery,coffeescript,parsley.js,custom-validators,Javascript,Jquery,Coffeescript,Parsley.js,Custom Validators,我有一个带有一些选项的选择框,如果有人选择了其他的,我希望文本框淡入,并且是必需的,至于让它显示出来,我很好,验证器就是我遇到问题的地方 以下是我迄今为止所尝试的,主要基于一个可用的示例 conditionalvalue: fn: (value, requirements) -> if requirements[1] == $(requirements[0]).val() return false true 在我的领域,我有

我有一个带有一些选项的选择框,如果有人选择了其他的,我希望文本框淡入,并且是必需的,至于让它显示出来,我很好,验证器就是我遇到问题的地方

以下是我迄今为止所尝试的,主要基于一个可用的示例

conditionalvalue:
    fn: (value, requirements) ->
        if requirements[1] == $(requirements[0]).val()
            return false
        true
在我的领域,我有这个

data-parsley-conditionalvalue='["[name=\"volunteer-check-in-new-name-title-select\"]", "other"]'
以下是我的选择框的外观,以供参考

<select name="volunteer-check-in-new-name-title-select" data-bind="volunteer-new-final-title-field">
    <option value="dr">Dr.</option>
    <option value="mr">Mr.</option>
    <option value="mrs">Mrs.</option>
    <option value="miss">Miss.</option>
    <option value="ms">Ms.</option>
    <option value="other">Other</option>
</select>

博士
先生
夫人
错过。
太太
其他

我觉得这与不使用函数的值部分有关?我希望有更多关于这方面的文档。

您无需自定义验证器就可以做到这一点(见下文)

如果确实要使用自定义验证器,则需要:

  • 确保属性
    数据parsley conditionalvalue
    等于以下值:
    [“[name=\”志愿者签入新姓名标题选择\“]选项:选中”,“其他”]

    注意,
    选项:选中
    ,您需要添加该选项以通过javascript从选项中获取值

  • 如果字段中为空,则需要让属性
    data parsley validate。否则,验证程序将不会执行,因为您的字段为空

  • 我真的说不出来,但似乎您正在注册验证程序,因为它在数据库中。如果是这样,您需要确保尚未加载
    parsley.js
    。否则,采取行动

  • 我给您留下这个工作代码(还有一个)。请注意,在注册验证程序之前,我正在加载欧芹

    <form id="someForm">
        <select name="volunteer-check-in-new-name-title-select" data-bind="volunteer-new-final-title-field">
            <option value="dr">Dr.</option>
            <option value="mr">Mr.</option>
            <option value="mrs">Mrs.</option>
            <option value="miss">Miss.</option>
            <option value="ms">Ms.</option>
            <option value="other">Other</option>
        </select>
        
        <input type="text" name="otherTitle" data-parsley-validate-if-empty data-parsley-conditionalvalue='["[name=\"volunteer-check-in-new-name-title-select\"] option:selected", "other"]' />
        <input type="submit" />    
    </form>
    
    <script>
    $(document).ready(function() {
        window.ParsleyValidator
        .addValidator('conditionalvalue', function (value, requirements) {
            if (requirements[1] == $(requirements[0]).val() && '' == value)
                return false;
            return true;
        }, 32)
        .addMessage('en', 'conditionalvalue', 'You have to insert some value');
        
        $("#someForm").parsley();
    });
    </script>
    

    在尝试了几种添加自定义验证器的方法之后,我意识到最短的方法是在更改下拉列表时更新data parsley required属性

    $('#select_input_id').change(function(){
       if(this.value=='other') 
         $('#other_input_id').attr('data-parsley-required',false);
       else  
         $('#other_input_id').attr('data-parsley-required',true);
    }); 
    
    $('#select_input_id').change(function(){
       if(this.value=='other') 
         $('#other_input_id').attr('data-parsley-required',false);
       else  
         $('#other_input_id').attr('data-parsley-required',true);
    });