0

我无法返回适当的回复。它有点像,在验证 parentAnswer 运行时,剥离名称以揭示父名称Answer[12]。现在,如果 this 的值为“yes”,那么我想返回如果尚未输入某些内容,这是必需的。

希望插件已经有一些内置的方式来检查它是否已经填写,而不必编写凌乱的代码来完成它。

<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"));
4

1 回答 1

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/

顺便说一句:jQuery Validate 非常喜欢你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"
            }
        }
    });

});

演示:http: //jsfiddle.net/UyMZ3/

于 2013-04-24T16:00:15.000 回答