我在回复相应的回复时遇到了麻烦。有点像在运行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"));
答案 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"
}
}
});
});