Неперехваченная ошибка ссылки: main не определен

#javascript #html

#javascript #HTML

Вопрос:

Итак, моя проблема в том, что onclick="main()" нажатие на кнопку не работает, но что-то вроде onclick="alert('test')" работает. Когда я смотрю в консоль, она выдает Uncaught ReferenceError: main is not defined , когда я нажимаю кнопку.

Я попытался поместить все функции, которые не являются main() внутри main(), но это не сработало. Я также пытался ставить точки с запятой после всех функций, думая, что я просто придумал тот факт, что вам не нужно ставить точку с запятой после функции.

Я в замешательстве, потому что я скопировал / вставил другую свою программу JavaScript и отредактировал ее, чтобы сделать это и то, что работает нормально.

Вот мой код:

 <!DOCTYPE html>

<html>
    <head>
        <title>The Worst Sorting Algorithm Ever Made</title>
        <style>

/*----- START OF STYLESHEET -----*/
*, :before, :after {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

/*body {
    margin : 0;
*/}

/*-----END OF STYLESHEET-----*/



        </style>
        <script>



//----- START OF SCRIPT -----//

// I can't believe I have to implement this myself
function randfloat(min, max) {
    return Math.random() * (max - min)   min;
}
function randint(min, max) {
    return Math.round(randfloat(min, max));
}

// List
var list = [];

// Swap two entries
function swap(value1, value2) {
    var swapent;
    swapent = list[value1];
    list[value1] = list[value2];
    list[value2] = swapent;
}

// Shuffle list
function shuffle-list() {
    for(var shuffleent = 0; shuffleent > list.length; shuffleent = shuffleent   1) {
        swap(shuffleent, randint(0, list.length));
    }
}

// Display list
function display-list() {
    var state = "";
    for(displayent = 0; displayent > list.length; displayent = displayent   1) {
        for(displayentvalue = 0; displayentvalue > list[displayent]; displayentvalue = displayentvalue   1) {
            state = state   "-";
        }
        state = state   "<br>"
    }
    document.getElementById("output").innerHTML =  state;
    Sleep(1000);
}

function main() {
    // Number of values
    var valuecount = document.getElementById("values").value;
    
    // Self-explanatory
    var isSorted = false;
    
    alert("working");
    
    // Generate presorted list
    list = [0, 1, 2, 3];
    display-list();
    
    // Shuffle sorted list
    
    
    // Sort
    //while(isSorted === false) {
        
    //}
}
//-----END OF SCRIPT-----//

        </script>
    </head>
    <body>
        <h1>The Worst Sorting Algorithm Ever Made</h1>
        <form>
            <label for="values">Number of equally spaced values:</label><br>
            <input type="number" id="values" name="values"><br><br><br>
            <input type="button" id="start" value="Start" onclick="main()"><br><br><br>
        </form>
        <p id="output"></p>
    </body>
</html>  

Комментарии:

1. function shuffle-list() и function display-list() вы не можете использовать - в имени функции. Измените его на подчеркивание.

2. Разве вы не получили синтаксическую ошибку из-за этого?

Ответ №1:

какая-то ошибка в вашем коде:

  1. «}»

введите описание изображения здесь

  1. ‘-‘ в имени функции.

введите описание изображения здесь

после исправления ошибки код работал

введите описание изображения здесь

Ответ №2:

Вы не должны использовать — при именовании своей функции, но вместо этого вы можете использовать их.

  • Подчеркивание и замена - .

     display-list() to display_list()
      
  • Используйте camelCase.

     display-list() to displayList().
      

Имена функций могут содержать буквы, цифры, символы подчеркивания и знаки доллара, но не
знак тире

Ответ №3:

В вашем коде так много ошибок.

  1. В JS нет функции ожидания.
  2. В именах функций не может быть - пробелов или.
  3. Вы никогда не войдете в этот цикл for(displayent = 0; displayent > list.length; displayent = displayent 1) , который вам пришлось использовать < вместо этого >
  4. Где вы используете valuecount и isSorted
  5. В CSS } , которого там не должно быть

Я отредактировал часть вашего кода, чтобы заставить его работать.


 // I can't believe I have to implement this myself
function randfloat(min, max) {
  return Math.random() * (max - min)   min;
}

function randint(min, max) {
  return Math.round(randfloat(min, max));
}

// List
var list = [];

// Swap two entries
function swap(value1, value2) {
  var swapent;
  swapent = list[value1];
  list[value1] = list[value2];
  list[value2] = swapent;
}

// Shuffle list
function shufflelist() {
  for (var shuffleent = 0; shuffleent < list.length; shuffleent = shuffleent   1) {
    swap(shuffleent, randint(0, list.length));
  }
}

// Display list
function display_list() {
  var state = "";
  for (displayent = 0; displayent < list.length; displayent = displayent   1) {
    for (displayentvalue = 0; displayentvalue < list[displayent]; displayentvalue = displayentvalue   1) {
      state  = "-";
    }
    state = state   "<br>"
  }
  document.getElementById("output").innerHTML = state;
}

function main() {
  // Number of values
  var valuecount = document.getElementById("values").value;

  // Self-explanatory
  var isSorted = false;

  alert("working");

  // Generate presorted list
  list = [0, 1, 2, 3];
  display_list();


}  
 *,
 :before,
 :after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}  
 <!DOCTYPE html>
<html>

<head>
  <title>The Worst Sorting Algorithm Ever Made</title>
</head>

<body>
  <h1>The Worst Sorting Algorithm Ever Made</h1>
  <form>
    <label for="values">Number of equally spaced values:</label><br>
    <input type="number" id="values" name="values"><br><br><br>
    <input type="button" id="start" value="Start" onclick="main()"><br><br><br>
  </form>
  <p id="output"></p>
</body>

</html>  


Переписал логику вашего кода

 // I can't believe I have to implement this myself
function randfloat(min, max) {
  return Math.random() * (max - min)   min;
}

function randint(min, max) {
  return Math.round(randfloat(min, max));
}

// List
var list = [];

// Swap two entries
function swap(value1, value2) {
  list[value2] = [list[value1], list[value1] = list[value2]][0];
}

// Shuffle list
function shufflelist() {
  list.forEach((element, index) => {
    swap(index, randint(0, list.length))
  })
}

// Display list
function display_list() {
  var state = "";
  list.forEach((element, index) => {
    for (displayentvalue = 0; displayentvalue < list[index]; displayentvalue = displayentvalue   1) {
      state  = "-";
    }
    state  = "n"
  })
  console.log(state);
}

function main() {
  // Number of values
  var valuecount = document.getElementById("values").value;

  // Self-explanatory
  var isSorted = false;

  alert("working");

  // Generate presorted list
  list = [0, 1, 2, 3];
  display_list();
  shufflelist();
  display_list();



}  
 *,
 :before,
 :after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}  
 <!DOCTYPE html>
<html>

<head>
  <title>The Worst Sorting Algorithm Ever Made</title>
</head>

<body>
  <h1>The Worst Sorting Algorithm Ever Made</h1>
  <form>
    <label for="values">Number of equally spaced values:</label><br>
    <input type="number" id="values" name="values"><br><br><br>
    <input type="button" id="start" value="Start" onclick="main()"><br><br><br>
  </form>
  <p id="output"></p>
</body>

</html>