我正在创建一个jQuery验证方法,我在二维字段(宽度和高度)上使用它。用户可以选择在页面上的选择框中使用毫米或英寸。这些字段验证了以下几点:
工作原理: 当一个字段正在使用时,将使用该字段的值完成ajax调用。该值进入PHP函数,将其转换为以毫米为单位的大小。这样可以以毫米为单位给出正确的结果。
当此值(以毫米为单位)返回时,它会通过一些条件语句来检查验证点。然后将结果变量设置为true或false,最后脚本返回它。
问题: 当我将我的大小设置为“英寸”时,我用38(965,19mm)填充第一个字段,第二个字段也填充到38,脚本返回true。这不应该发生,因为我的if语句说如果一个字段超过860mm,另一个字段可能不超过860mm。奇怪的是,使用毫米大小,一切都正常..
我的Javascript:
/** Dimension restrictions validator method */
jQuery.validator.addMethod( 'restrictions', function(value, element) {
// Set variables
var result = true;
var message = '';
var other = $(element).parents().siblings('.input-group').find('.dimension-field').val();
var mUnit = $('#size_data option:selected').val();
// Do ajax call to get millimeters
$.ajax({
url: sbt.ajaxurl,
async: false,
data: { action: 'sbt_mm_value', value: value, mu: mUnit },
success: function(data) {
// Smaller than 980
if(data <= 980) {
// Bigger than 100
if(data >= 100) {
result = true;
} else {
result = false;
if(mUnit == 'in') {
message = sbt.msg.restrictions.minimum + ' 3.93in';
} else {
message = sbt.msg.restrictions.minimum + ' 100mm';
}
}
// Bigger than 860
if(data > 860) {
// Other field smaller than or equal than 860
if(other <= 860) {
result = true;
} else {
result = false;
if(mUnit == 'in') {
message = sbt.msg.restrictions.maximum + ' 33.85in';
} else {
message = sbt.msg.restrictions.maximum + ' 860mm';
}
}
}
// Smaller than or equal to 860
if(data <= 860) {
// Other field smaller than or equal than 980
if(other <= 980) {
result = true;
} else {
result = false;
if(mUnit == 'in') {
message = sbt.msg.restrictions.maximum + ' 33.85in';
} else {
message = sbt.msg.restrictions.maximum + ' 860mm';
}
}
}
} else {
result = false;
if(mUnit == 'in') {
message = sbt.msg.restrictions.maximum + ' 38.58in';
} else {
message = sbt.msg.restrictions.maximum + ' 980mm';
}
}
}
});
// Set message
$.validator.messages.restrictions = message;
// Return true or false
return result;
});
将该方法应用于字段:
$('#action_form').validate({
rules: {
width_data: {
required: true,
restrictions: true,
},
height_data: {
required: true,
restrictions: true,
},
},
});
答案 0 :(得分:0)
我自己找到了解决方案。问题是由于其他字段值未转换为毫米而引起的。这就是为什么它可以选择尺寸而不是英寸的毫米,因为毫米已经是毫米,但不是英寸。
/** Dimension restrictions validator method */
jQuery.validator.addMethod( 'restrictions', function(value, element) {
// Gets selected size
var mUnit = $('#size_data option:selected').val();
// Gets values of both fields
var otherField = $(element).parents().siblings('.input-group').find('.dimension-field').val().toString();
var thisField = value.toString();
// Set default variables
var result = true;
var message = '';
/** Does AJAX call to get millimeters and does checks */
$.ajax({
url: sbt.ajaxurl,
async: false,
data: { action: 'sbt_mm_value', mu: mUnit },
success: function(data) {
// Gets one unit in millimeters
var multiply = data.toString();
// Get millimeter values
var value = thisField * multiply;
var other = otherField * multiply;
//console.log('Value = ' + value + ' and other is '+ other);
// Smaller than 980
if(value <= 980) {
// Greater than 100
if(value >= 100) {
result = true;
} else {
result = false;
if(mUnit == 'in') {
message = sbt.msg.restrictions.minimum + ' 3.93in';
} else {
message = sbt.msg.restrictions.minimum + ' 100mm';
}
}
// Greater than 860
if(value > 860) {
// Other field smaller than or equal than 860
if(other <= 860) {
result = true;
} else {
result = false;
if(mUnit == 'in') {
message = sbt.msg.restrictions.maximum + ' 33.85in';
} else {
message = sbt.msg.restrictions.maximum + ' 860mm';
}
}
}
// Smaller than or equal to 860
if(value <= 860) {
// Other field smaller than or equal than 980
if(other <= 980) {
result = true;
} else {
result = false;
if(mUnit == 'in') {
message = sbt.msg.restrictions.maximum + ' 33.85in';
} else {
message = sbt.msg.restrictions.maximum + ' 860mm';
}
}
}
} else {
result = false;
if(mUnit == 'in') {
message = sbt.msg.restrictions.maximum + ' 38.58in';
} else {
message = sbt.msg.restrictions.maximum + ' 980mm';
}
}
}
});
// Set message
$.validator.messages.restrictions = message;
// Return true or false
return result;
});