2015-12-04 2 views
0

Надеюсь, я получу этот формат. Я знаю, что это вопрос новичков и, вероятно, довольно очевидный, но я смущен тем, как проверить эти поля. У меня есть два поля ввода на файл JSP:Ошибка JavaScript при проверке наличия двух числовых значений

<input id="CMDScheduleNumber" type="number" class="textsmall" maxlength="5" 
     onKeyPress="return numbersonly(this, event)"/> 

<input id="CMDContractYear" type="number" class="textsmall" maxlength="4" 
     onKeyPress="return numbersonly(this, event)"/> 

У меня есть функция в сценарии под названием «searchEFT», который проверяет, если либо номер графика или год контракта заполняется, то оба они должны быть заполнены.

 <script type="text/javascript"> 
      //function for onchange  
      $(document).ready(function() { 
       $("#searchEFT").click(function() { 

        var Cmd_Sched_Number = document.getElementById("CMDScheduleNumber"); 
        var Cmd_Contract_Year = document.getElementById("CMDContractYear"); 
        var Cmd_Status = document.getElementById("CMDSchedStatus"); 
        var Cmd_Creation_Date = ocument.getElementById("CMDCreationDate"); 

        if (Cmd_Sched_Number == "") { 
         If(Cmd_Contract_Year !== "") 
         alert("Schedule Number and EFT Contract Year must be both populated"); 
         return; 
        } 
        else if (Cmd_Sched_Number == "") { 
         alert("Schedule Number and EFT Contract year must be both populated"); 
         return; 
        } 

Когда я попытался сделать отладчик, если поле Cmd_Sched_Number значение отображается как «», но valueasnumber показан как «NaN». Поэтому, когда я делаю чек, я должен проверить, что это «" или проверить его как числовое с isNaN и/или IsNull?

Спасибо за помощь

+0

В какой-то момент я рекомендую посмотреть jQuery или аналогичный пакет. Это делает вещи намного проще. – Draco18s

+0

OP уже использует что-то подобное. Вы можете увидеть это в коде. Тем не менее, здесь вряд ли нужно. – Mic

+0

Для элементов значение value возвращает строку. Свойство valueAsNumber пытается преобразовать строку в число. Если преобразование невозможно, valueAsNumber возвращает значение NaN. Поскольку вы проверяете, было ли что-то введено, проверка значения свойства в порядке. –

ответ

0

var Cmd_Sched_Number = document.getElementById("CMDScheduleNumber"); Получает элемент.

Использование .value получить value от Element

Что-то вроде:

var Cmd_Sched_Number = document.getElementById("CMDScheduleNumber").value; 

Кроме того, поскольку у вас есть JQuery уже, рассмотреть возможность использования его. как:

var Cmd_Sched_Number = $("CMDScheduleNumber").val(); 
+0

, если (Cmd_Sched_Number.value) будет оценивать значение false на 0. – Mic

+0

@Mic хорошая точка. – Vivek

0

Пользовательские валидация кода действительно беспорядок. Сколько условий вы можете проверить? Существует множество библиотек с открытым исходным кодом, и они отлично справляются с этой задачей.

Я бы порекомендовал вас использовать validate.js. Его очень простой и простой в использовании. Он устанавливает правила в полях и проверяет их.

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

+0

Пользовательские проверки кода - это беспорядок, только если вы их возите;). – Teemu

+0

Если у вас есть хороший источник, я думаю, вы должны его использовать. – Shaharyar

+0

Учитывая вопрос, нет библиотеки, которая могла бы работать для OP, если они не знают основ. – Teemu

0

Как правильно указал Арагорн, убедитесь, что вы получаете значения, а не объекты JQuery или элементы DOM.

function isPopulated(val) { 
    return !(val === '' || isNaN(val)); 
} 

//and then in your click event handler...: 

if((isPopulated(Cmd_Sched_Number) || isPopulated(Cmd_Contract_Year)) && !(isPopulated(Cmd_Sched_Number) && isPopulated(Cmd_Contract_Year))) { 
    //Handle the case where one is populated and the other isn't, assuming you want to treat any non-numbers as not populated. 
} 

Это если вы хотите общий блок для любого сценария одного заселенных и другого нет, она будет оцениваться как XOR.

Причина, по которой моя функция isPopulated проверяет как пустую строку, так и isNaN - это isNaN ('') будет оцениваться как false.

Если вам не важно, действительно ли введенное значение является числовым или нет, тогда вы, возможно, захотите проверить значение.length> 0, например.

Смежные вопросы