Запретить действие, если данные поля ввода неверны. (js) - PullRequest
0 голосов
/ 14 апреля 2020

Я застрял здесь с какой-то проблемой. Есть 3 двух поля ввода: на день рождения, сумма и процентная ставка (%). Если вы нажмете на кнопку, на странице будет показан обзор баланса, пока сумма не будет удвоена. Таким образом, проблема заключается в следующем: когда я ввожу неправильную дату, я получаю уведомление. Тем не менее, проценты все еще рассчитываются впоследствии. Я хочу предотвратить выполнение кода с неправильным вводом.

document.getElementById("button").onclick = loop;
var inputA = document.getElementById("inputA");
var inputB = document.getElementById("inputB");
var inputC = document.getElementById("inputC");
var result = document.getElementById("result")

function allFunctions() {
    correctBirthday()
    sum();
    rate();
    loop();
}

 function loop() {
  var s = inputB.value;
  var r = inputC.value;
  var doubleS = s * 2;
  while (s < doubleS) {
    s = ((r / 100 + 1) * s);
    result.innerHTML += s + "<br>";
  }
  if (inputA.value == '')
    { alert('Please enter a value for input A');
  return;
 }
}

function correctDate(datum) {
    var vorm = /^\d{2}-\d{2}-\d{4}$/;
    return vorm.test(datum);
}

function correctBirthday() {
    var d = inputA.value;
    if ( correctDate(d) == false ) {
        alert("The form of the date is incorrect");
        return;
    }
    if ( validDate(d) ) {
        result.innerHTML = '';
    }
}

function rate() {
    var r = rentepercentage.value;
    if ( correctRate(r) == true ) {
        alert("The form of the amount entered is incorrect");
        return;
    } else {
        result.innerHTML = '';
    }
}

function correctRate(rente) {
    var vorm = /[a-zA-Z]/;
    return vorm.test(rente);
}


function sum() {
    var s = bedrad.value;
    if ( correctSum(s) === true ) {
        alert("The form of the amount entered is incorrect");
        return;
    } else {
        result.innerHTML = '';
    }
}

function correctSum(som) {
    var vorm = /[a-zA-Z]/;
    return vorm.test(som);
}
<! DOCTYPE html>
<html>
<body>

<br>
<input type="text" id="inputA" value="05-06-1986"><br>
<input type="text" id="inputB" value="10"><br>
<input type="text" id="inputC"  value="4"><br><br>


<button id="button">Klik</button>

<p> De ingevoerde resultaten: </p>
<p id="result"></p>

<script async src="oefin1.js"></script>
</body>
</html>

Таким образом, проблема заключается в следующем: когда я ввожу неправильную дату, я получаю уведомление. Тем не менее, проценты все еще рассчитываются впоследствии. Я хочу предотвратить выполнение кода с неправильным вводом.

1 Ответ

0 голосов
/ 14 апреля 2020

В вашей функции allFunctions:

function allFunctions() {
    correctBirthday()
    sum();
    rate();
    loop();
}

Если correctBirthday возвращает неопределенное значение, allFunctions не знает, что должно остановиться. У вас есть два основных варианта:

  1. Сгенерировать ошибку, если день рождения неправильный, и перехватить ее позже:
function allFunctions() {
    try {
        correctBirthday()
        sum();
        rate();
        loop();
    } catch ( error ) {
        alert( error.message );
    }
}

function correctBirthday() {
    var d = inputA.value;
    if ( correctDate(d) == false ) {
        throw new Error("The form of the date is incorrect");
    }
    if ( validDate(d) ) {
        result.innerHTML = '';
    }
}
Позвольте correctBirthday вернуть true или false в зависимости от того, удалось ли это, и пусть allFunctions ответит соответственно:
function allFunctions() {
    let birthdayIsCorrect = correctBirthday();
    if ( !birthdayIsCorrect ) {
        return;
    )
    sum();
    rate();
    loop();
}

function correctBirthday() {
    var d = inputA.value;
    if ( correctDate(d) == false ) {
        alert("The form of the date is incorrect");
        return false;
    }
    if ( validDate(d) ) {
        result.innerHTML = '';
    }
    return true;
}

РЕДАКТИРОВАТЬ: Если вы хотите, чтобы это поведение при validDate(d) также неверно, попробуйте ...

function correctBirthday() {
    var d = inputA.value;
    if ( correctDate(d) == false ) {
        throw new Error("The form of the date is incorrect");
    }
    if ( !validDate(d) ) {
        throw new Error("The date is invalid");
    }
    result.innerHTML = '';
}

// or...


function correctBirthday() {
    var d = inputA.value;
    if ( correctDate(d) == false ) {
        alert("The form of the date is incorrect");
        return false;
    }
    if ( !validDate(d) ) {
        alert("The date is invalid");
        return false;
    }
    result.innerHTML = '';
    return true;
}
...