Функция не определена при использовании оператора if else

#javascript

#javascript

Вопрос:

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

 <!DOCTYPE html>
<html>
    <head>
        <title>Pierre Omidyar</title>
    </head>


<script>
    var x = 0
    function pierre() {
        if (x = 0) {
          document.getElementById('myImage').src='https://cdn3.pitchfork.com/longform/699/Pierre1.jpg'; 
            var x = 1
        } else {
            var x = 0
        }
    } 
</script>
    <body>
        <button onclick="pierre()" type="button">pierre</button>
        <br>
        <img height=50%  width=50% id="myImage" src="https://upload.wikimedia.org/wikipedia/commons/0/0b/Pierre_Omidyar_(50911249).jpg"/>
        <audio loop id="no"><source src="https://codehs.com/uploads/9af74ff56cf4b8ed3809fba276efa59e" type="audio/mpeg"></audio>

    <p id="para">Hi, I'm Pierre Omidyar, I made eBay</p>
    </body>
</html>
  

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

1. Вы только что присвоили новое значение = … прочитайте сравнение JavaScript и логические операторы w3schools.com/js/js_comparisons.asp

2. «… он говорит, что функция не определена» Вы имеете в виду, что в консоли разработчика она выдает это сообщение об ошибке? Это удивительно, учитывая ваш код. Обычно это происходит, когда у вас где-то есть синтаксическая ошибка, но я ее не вижу.

Ответ №1:

Функция вызывается (не undefined проблема)

В вашем коде есть 2 проблемы.

  1. Вы определили x переменную несколько раз. Это недопустимо.
  2. if (x = 0) { всегда равно false, и я думаю, что его следует изменить на x == 0 .

Теперь этот код будет работать.

 <!DOCTYPE html>
<html>
    <head>
        <title>Pierre Omidyar</title>
    </head>


<script>
    var x = 0;
    function pierre() {
        if (x == 0) {
          document.getElementById('myImage').src='https://cdn3.pitchfork.com/longform/699/Pierre1.jpg'; 
          x = 1;
        } else {
          x = 0;
        }
    } 
</script>
    <body>
        <button onclick="pierre()" type="button">pierre</button>
        <br>
        <img height=50%  width=50% id="myImage" src="https://upload.wikimedia.org/wikipedia/commons/0/0b/Pierre_Omidyar_(50911249).jpg"/>
        <audio loop id="no"><source src="https://codehs.com/uploads/9af74ff56cf4b8ed3809fba276efa59e" type="audio/mpeg"></audio>

    <p id="para">Hi, I'm Pierre Omidyar, I made eBay</p>
    </body>
</html>
  

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

1. if (x = 0) { всегда false . И разрешено повторно объявлять переменную. Проблема в том, что функция x затеняет глобальную, даже если функция var идет после if условия.

2. предполагается, что это переключатель, поэтому x будет меняться между 0 и 1 при каждом нажатии кнопки, я не уверен, что вы имеете в виду, определяя его несколько раз

Ответ №2:

В вашем коде было несколько проблем. Вот обновленный код

 <!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>JS Bin</title>
    <script type="text/javascript">
      var x = 0;
      function pierre() {
        if (x === 0) {
          document.getElementById('myImage').src = 'https://cdn3.pitchfork.com/longform/699/Pierre1.jpg';
          x = 1
        }
        else {
          x = 0
        }
      }
    </script>
  </head>
  <body>
    <button onclick="pierre()" type="button">pierre</button>
    <br>
    <img height=50%  width=50% id="myImage" src="https://upload.wikimedia.org/wikipedia/commons/0/0b/Pierre_Omidyar_(50911249).jpg"/>
    <audio loop id="no">
      <source src="https://codehs.com/uploads/9af74ff56cf4b8ed3809fba276efa59e" type="audio/mpeg">
    </audio>
    <p id="para">Hi, I'm Pierre Omidyar, I made eBay</p>
  </body>
</html>