Я создаю метод проверки jQuery, который я использую в двух размерных полях (ширина и высота). Пользователь может выбрать миллиметры или дюймы в окне выбора на странице. Поля, подтверждающие проверку следующих объектов:Метод проверки возвращает true не false
- Макс. 980 мм
- Мин. 100 мм
- Если одно из двух полей больше 860 мм, другое может быть не более , чем 860 мм.
Как это работает: Когда поле используется, Ajax вызов будет сделано со значением поля. Значение переходит в функцию PHP, которая преобразует ее в размер в миллиметрах. Это дает правильные результаты в миллиметрах назад.
Когда это значение (в миллиметрах) возвращается, оно проходит через некоторые условные операторы для проверки точки проверки. Затем переменная result получает значение true или false, а в конце сценарий возвращает ее.
Проблема: Когда я установил свой размер в «дюймах», и я заполняю в первом поле с 38 (965,19mm) и второе поле также 38, скрипт возвращает истину. Это не должно произойти, потому что в заявлении if указано, что если одно поле больше 860 мм, то другое может быть не более 860 мм. Странно то, что с помощью миллиметров, как размер, все идет хорошо ..
Мои 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,
},
},
});
Ваш вопрос очень неясен. Вы объясняете, что значение может быть введено в дюймах, но ваша условная логика настроена только для сравнения этого введенного значения с различными числами, которые представлены «мм». Я ничего здесь не вижу, что делает какие-либо переводы на английском/метрическом ... так как вы можете ожидать эту работу? – Sparky
Очевидно, что если он работает отлично, когда вы вводите значение как 'мм', тогда нет ничего плохого в коде, который вы нам показали. Вам нужно будет показать нам код на стороне сервера, так как это, по-видимому, где находится ваша неудачная логика. – Sparky
@Sparky В моем вопросе я объясняю, что если кто-то решит использовать дюймы, то значение в дюймах вместе с выбранным размером (который затем будет дюймом) отправляется с вызовом AJAX для функции PHP. Эта функция PHP преобразует ее в значение mm (что составляет 25,4 дюйма). Затем я всегда рассчитываю с помощью mm, но мне нужно показывать сообщения об ошибках для дюймов, если выбранный размер. В моем разделе проблемы я объясняю, что происходит неправильно, когда дюйм выбран как размер и что он идет правильно с мм в качестве выбранного размера. – Robbert