Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.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
jquery验证:突出显示两个元素之间共享的标签_Jquery_Validation_Jquery Validate - Fatal编程技术网

jquery验证:突出显示两个元素之间共享的标签

jquery验证:突出显示两个元素之间共享的标签,jquery,validation,jquery-validate,Jquery,Validation,Jquery Validate,我有两个元素共享一个标签 我需要在上面添加/删除一个CSS类,因为这两个元素正在被验证。如果其中一个或两个无效-标签需要变为红色。如果两者都有效-标签标记为有效 我不知道如何在不进入无休止循环的情况下进行验证,其中一个元素会触发另一个元素的验证,而另一个元素又会触发第一个元素的验证,等等。我现在只能考虑使用highlight/unhighlight方法 编辑:这里有一个可以玩的游戏 $("#my-profile-form").validate({ errorContainer: "#e

我有两个元素共享一个标签

我需要在上面添加/删除一个CSS类,因为这两个元素正在被验证。如果其中一个或两个无效-标签需要变为红色。如果两者都有效-标签标记为有效

我不知道如何在不进入无休止循环的情况下进行验证,其中一个元素会触发另一个元素的验证,而另一个元素又会触发第一个元素的验证,等等。我现在只能考虑使用highlight/unhighlight方法

编辑:这里有一个可以玩的游戏

$("#my-profile-form").validate({
    errorContainer: "#errorProfile",
    highlight: function(el, errorClass, validClass) {
        var $el = $(el);
        if($el.attr('name') == 'state'){
            $el.addClass(errorClass).removeClass(validClass);
            $el.parents('fieldset').addClass('error');
        } else if ($el.attr('name') == 'zip') {
            $el.addClass(errorClass).removeClass(validClass);
        } else {
            $el.parents('fieldset').addClass(errorClass);
        }
    },
    unhighlight: function(el, errorClass, validClass) {
        var $el = $(el);

        if($el.attr('name') == 'state'){
            $el.removeClass(errorClass).addClass(validClass);
        } else if($el.attr('name') == 'zip') {
            $el.removeClass(errorClass).addClass(validClass);
        } else {
            $el.parents('fieldset').removeClass(errorClass);
        }
    },
    errorPlacement: function(error,element) {
        return true;
    },
    ignore: "", // needed to validate drop-downs in IE
    rules: {
        zip: {
            postalcode: true,
            required: true
        }
    },
    messages: {
        zip: {
            postalcode: " Please specify a valid zip code.",
            required: " The zip field is required."
        }
    }
});
那怎么办

...
if($el.attr('name') == 'state' || $el.attr('name') == 'zip'){
    $el.addClass(errorClass).removeClass(validClass);
    $el.siblings('label:not([generated])').AddErrorClassIfNotAlreadyPresent();
}
...

最终没有使用验证器来解决问题。我将“更改”处理程序附加到这两个元素,并在其中执行所有工作

var v_profile = $("#my-profile-form").data('validator');
$("select.state, input.zip").on('change', { errorClass: v_profile.settings.errorClass, validClass: v_profile.settings.validClass }, function(ev){
    var validator = $(this).parents('form').data('validator');
    var res1 = validator.element( "select.state" );
    var res2 = validator.element( "input.zip" );
    if(res1 && res2){ 
        $(this).parents('fieldset').addClass(ev.data.validClass).removeClass(ev.data.errorClass); 
    } else { 
        $(this).parents('fieldset').addClass(ev.data.errorClass).removeClass(ev.data.validClass); 
    }
});

您是否可以将其写入一个JSFIDLE中,这样我们就可以对代码进行实验?如果不知道
highlight/unhighlight
方法是否有效,这很难提供帮助。jsfiddle.net中的一些实时html可能会help@MrXenotype当前位置除了我描述的以外,一切都正常,我甚至不知道如何开始。只是需要一个关于如何实现这个功能的基本概念。即使是伪代码也可以我们只能猜测您的标记是什么样的。您可以在jsfiddle中使用pluginI的CDN资源来设置这个问题。在过去的一个小时里,我们使用了两种完全不同的方法来解决这个问题,但都失败了。似乎常见的问题是,当一个字段在模糊时无效/空白时,当它重新获得焦点时,它的“状态”总是恢复为
valid
,即使它仍然为空。当然,这可能会在高亮显示时起作用,但是删除类的情况如何?