2

My JavaScript contains two functions. One function gets a number from the user and returns a string that shows if the number is a prime or not and then store the number and the result in an array.

results = new Array();
i = 0;

function isPrime(num) {
    flag = false;

    if (num > 1) {
        for (i = 2; i < num; i++) {
            if (num % i == 0) {
                flag = true;
                break;
            }
        }
    }

    return !flag;
}

function getNumberPrime(number) {
    condition = (isPrime(number)) ? ('is') : ('is not');
    console.log('' + number + ' ' + condition + ' prime');

    dict = {}
    dict['number'] = number
    dict['isPrime'] = isPrime(number);
    results.push(dict);
}

function getAll() {
    for (i = 0; i < results.length; i++) {
        condition = (results[i]['isPrime']) ? ('is') : ('is not');
        number = results[i]['number']
        console.log('' + number + ' ' + condition + ' prime');
    }
}

My HTML has an input and two buttons. One button returns the output of the first function and the second should show the items of array.

<!DOCTYPE html>
<html lang="fa">

<head>
  <title>Prime Number</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
  <script src="prime.js"></script>
</head>

<body>
  <div class="container">
    <h2>Find Prime Numbers</h2>
    <form>
      <div class="form-group">
        <label class="control-label col-sm-2">Numbers:</label>
        <div class="col-sm-10">
          <input class="form-control" id="inp" name="nums" style="margin-left: -11%">
        </div>
      </div>
      <button type="submit" class="btn btn-default" style=" margin-top: 2%;" onclick="getNumberPrime()">Check</button>
      <button type="submit" class="btn btn-default" style="margin-top: 2%;" onclick="document.getElementById('showprime').innerHTML =getAll()">Show Result</button>
      <p id="showprime"></p>
    </form>
  </div>
</body>

</html>

But the first button doesn't work and I don't know how to implement the second button.

Prime numbers must be blue and none primes must be red.

1 Answer 1

2

First: Your buttons need to have type="button" to prevent a reload because of the submit.


Your function getNumberPrime() wants a parameter number which you aren't offering in your inline event handler. Therefor you should get the number in that function by selecting the input and getting its value:

let number = document.querySelector('#inp').value;

Your function getAll() doesn't return anything and therefor the result isn't inserted in #showprime. Instead of loging the values to the console you could add them to an output string and return that string after the for loop:

let output = '';
  
for (i = 0; i < results.length; i++) {
  ...
  output += number + ' ' + condition + ' prime<br>';
}
  
return output;

If you want the output to be colored you could wrap each result in a paragraph tag and give it a class dependent on the condition. In this case #showprime should be container element like a div. The class would be styled with CSS.

Inside the for loop:

check = (results[i]['isPrime']) ? true : false;
condition = check ? ('is') : ('is not');
...
output += '<p class=' + check + '>' + number + ' ' + condition + ' prime</p>';

In your CSS-file:

.true {
  color: blue;
}

.false {
  color: red;
}

Last: It's better to devide Javascript and HTML and not to use inline event handlers. Therefor you should change this:

<button ... onclick="getNumberPrime()">Check</button>
<button ... onclick="document.getElementById('showprime').innerHTML = getAll()">Show Result</button>

to this:

<button id="check" ...>Check</button>
<button id="show" ...>Show Result</button>
document.querySelector('#check').addEventListener('click', getNumberPrime);
document.querySelector('#show').addEventListener('click', function() {
  document.getElementById('showprime').innerHTML = getAll();
});

Working example:

results = new Array();
i = 0;

function isPrime(num) {
  flag = false;

  if (num > 1) {
    for (i = 2; i < num; i++) {
      if (num % i == 0) {
        flag = true;
        break;
      }
    }
  }

  return !flag;
}

function getNumberPrime() {
  let number = document.querySelector('#inp').value;
  
  condition = (isPrime(number)) ? ('is') : ('is not');
  console.log('' + number + ' ' + condition + ' prime');

  dict = {}
  dict['number'] = number
  dict['isPrime'] = isPrime(number);
  results.push(dict);
}

function getAll() {
  let output = '';
  
  for (i = 0; i < results.length; i++) {
    check = (results[i]['isPrime']) ? true : false;
    condition = check ? ('is') : ('is not');
    number = results[i]['number'];
    output += '<p class=' + check + '>' + number + ' ' + condition + ' prime</p>';
  }
  
  return output;
}

document.querySelector('#check').addEventListener('click', getNumberPrime);
document.querySelector('#show').addEventListener('click', function() {
  document.getElementById('showprime').innerHTML = getAll();
});
.true {
  color: blue;
}

.false {
  color: red;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>

<div class="container">
  <h2>Find Prime Numbers</h2>
  <form>
    <div class="form-group">
      <label class="control-label col-sm-2">Numbers:</label>
      <div class="col-sm-10">
        <input class="form-control" id="inp" name="nums" style="margin-left: -11%">
      </div>
    </div>
    <button id="check" type="button" class="btn btn-default" style=" margin-top: 2%;">Check</button>
    <button id="show" type="button" class="btn btn-default" style="margin-top: 2%;">Show Result</button>
    <div id="showprime"></div>
  </form>
</div>

Sign up to request clarification or add additional context in comments.

1 Comment

thank you. this worked but with some edit. getNumberPrime() should return the output and I fixed it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.