2015-09-14 6 views
-1

Я создаю метод проверки 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, 
     }, 
    }, 
}); 
+0

Ваш вопрос очень неясен. Вы объясняете, что значение может быть введено в дюймах, но ваша условная логика настроена только для сравнения этого введенного значения с различными числами, которые представлены «мм». Я ничего здесь не вижу, что делает какие-либо переводы на английском/метрическом ... так как вы можете ожидать эту работу? – Sparky

+0

Очевидно, что если он работает отлично, когда вы вводите значение как 'мм', тогда нет ничего плохого в коде, который вы нам показали. Вам нужно будет показать нам код на стороне сервера, так как это, по-видимому, где находится ваша неудачная логика. – Sparky

+0

@Sparky В моем вопросе я объясняю, что если кто-то решит использовать дюймы, то значение в дюймах вместе с выбранным размером (который затем будет дюймом) отправляется с вызовом AJAX для функции PHP. Эта функция PHP преобразует ее в значение mm (что составляет 25,4 дюйма). Затем я всегда рассчитываю с помощью mm, но мне нужно показывать сообщения об ошибках для дюймов, если выбранный размер. В моем разделе проблемы я объясняю, что происходит неправильно, когда дюйм выбран как размер и что он идет правильно с мм в качестве выбранного размера. – Robbert

ответ

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; 

}); 
Смежные вопросы