Jquery Validation插件 - 自定义方法返回

时间:2013-04-24 00:05:47

标签: jquery jquery-validate

我在回复相应的回复时遇到了麻烦。有点像在运行parentAnswer验证时,剥离名称以显示父名Answer[12]。现在,如果这个值是'是',那么我想要返回,如果还没有输入,这是必需的。

希望插件有一些已经内置的方法来检查它是否已经填写完毕,而不必编写凌乱的代码来执行此操作。

<select class="input-small" name="Answers[12]">
    <option value="no">No</option>
    <option value="yes">Yes</option>
</select>    
<textarea class="parentAnswer" rows="5" cols="107" name="Answers[12a]"></textarea>

方法

jQuery.validator.addMethod("parentAnswer", function(value, element) {
    var parentElement = element.name.replace(/(.*)\[(\d*).*\]/, "$1[$2]");
    var parentValue = $('select[name="'+parentElement+'"]').val();
    if(parentValue === 'yes'){
        return this.optional(element) || (parseFloat(value) > 0);
        //^ this is the line in question
    } else {
        return true;
    }
}, jQuery.format("Could you supply more details"));

1 个答案:

答案 0 :(得分:1)

使用控制台日志检查您的parseFloat(value),除非NaN包含一些数字,否则您将看到它始终返回textarea。我认为这不是你想要的。

尝试使用这个更简单的逻辑:

jQuery.validator.addMethod("parentAnswer", function (value, element) {
    var parentElement = element.name.replace(/(.*)\[(\d*).*\]/, "$1[$2]");
    var parentValue = $('select[name="' + parentElement + '"]').val();
    return !(parentValue === 'yes' && $(element).val() === '');
}, jQuery.format("Could you supply more details"));

工作演示:http://jsfiddle.net/6LGFy/

BTW :jQuery非常感谢您在所有输入字段中拥有name属性。您的textarea缺少此属性。


修改

或者,您可以使用depends子选项而不是自定义方法。这种方式更简单,但您可能需要也可能不需要调整下面的选择器。

$(document).ready(function () {

    $('#myform').validate({
        rules: {
            answer: {
                required: {
                    depends: function(element) {
                        return $("select[name^='Answers'] option[value='yes']").is(":selected");
                    }
                }
            }
        },
        messages: {
            answer: {
                required: "Could you supply more details"
            }
        }
    });

});

DEMO:http://jsfiddle.net/UyMZ3/