Почему моя не отображается после функции?

#javascript

#javascript

Вопрос:

Я хочу, чтобы кнопка «Посмотреть ваш ввод» появлялась только после заполнения полей. Но изо всех сил пытаюсь заставить кнопку появиться. Пожалуйста, посоветуйте.

 function notify() {
  alert("Welcome to my form");
  var name = prompt("Enter your name");
  var city = prompt("Which city you are living in");
  var mobile = prompt("Enter your phone number");
}

function nextStep() {
  var a = document.getElementById("showUp");
  if (a.style.display === "none") {
    a.style.display = "block";
    document.getElementById("name").innerHTML = "Your name is "   name;
    document.getElementById("city").innerHTML = "Your city is "   city;
    document.getElementById("mobile").innerHTML = "Your phone number is "   mobile;
  } else {
    x.style.display = "none";
  }
}  
 <p>Click the button to display an alert box.</p>
<button onclick="notify()">Try it</button>
<div id="showUp" style="display: none;">
  <button onclick="nextStep()">See your input</button>
</div>
<p id="name"></p>
<p id="city"></p>
<p id="mobile"></p>  

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

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

2. Откуда вы получаете x.style.display = «none»;? также ваша функция NeXTSTEP скрыта.

3. И ваш var name виден только внутри этой функции, а не глобально

Ответ №1:

Ничто не выполняет функцию nextStep() .

Вам нужно вызвать функцию nextStep() после подсказок.

Вы привязали свою функцию к кнопке при нажатии. Но поскольку пользователь не может видеть кнопку, она не будет запущена.

Функция выполняется, вызывая ее только после того, как она была определена.

 function myFunc() {
// do thing
}

myFunc(); // This executes the function above.
  
 function notify() {
  alert("Welcome to my form");
  var name = prompt("Enter your name");
  var city = prompt("Which city you are living in");
  var mobile = prompt("Enter your phone number");

  nextStep(); // Add
}
  

Или вы могли бы переместить логику из вашей showUp() функции, которая отображает кнопку, в notify() функцию.

 var name;
var city;
var mobile;

function notify() {
  alert("Welcome to my form");
  name = prompt("Enter your name");
  city = prompt("Which city you are living in");
  mobile = prompt("Enter your phone number");

  showButton();
}

function showButton() {
  var a = document.getElementById("showUp");
  if (a.style.display === "none") {
    a.style.display = "block";
  } else {
    a.style.display = "none";
  }
}

function nextStep() {
  document.getElementById("name").innerHTML = "Your name is "   name;
  document.getElementById("city").innerHTML = "Your city is "   city;
  document.getElementById("mobile").innerHTML = "Your phone number is "   mobile;
}
  

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

1. Если он только хочет отобразить кнопку, то он может просто поставить document.getElementById("showUp").style.display = "block"; вместо nextStep(); здесь.

2. @mr.mams Я в курсе. Я считаю, что путаница кроется в фундаментальных принципах. Не в деталях.

3. вы совершенно правы. Но моя точка зрения была больше о приближении к «требованиям»: при изучении основ также важно как можно больше придерживаться требований (или выявлять их должным образом, в зависимости от того, откуда OP получил это требование).

4. Однако ввод будет отображаться без нажатия пользователем кнопки. Я не уверен, в чем проблема в данном случае.

Ответ №2:

Здесь есть пара проблем;

  1. после отправки всех желаемых значений показать кнопку внутри notify() , подсказки и оповещения останавливают выполнение остальной части скрипта до тех пор, пока они не будут выполнены, поэтому кнопка будет отображаться после того, как все будет заполнено.

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

  3. Вызывайте nextStep() при нажатии кнопки и используйте tho0se varibales.

 var name="";
var city ="";
var mobile ="";
// 1. first declare varibales outside of functions


function notify() {
  alert("Welcome to my form");
  
  name = prompt("Enter your name");
  city = prompt("Which city you are living in");
  mobile = prompt("Enter your phone number");
// 2. fill variables with data  
  
  var a = document.getElementById("showUp");
  a.style.display = "block";
// 3. show button after   prompt's are done
}

function nextStep() {
    document.getElementById("name").innerHTML = "Your name is "   name;
    document.getElementById("city").innerHTML = "Your city is "   city;
    document.getElementById("mobile").innerHTML = "Your phone number is "   mobile;
// 4. now you can use those varaibles with data to show to user    
}  
 <p>Click the button to display an alert box.</p>
<button onclick="notify()">Try it</button>
<div id="showUp" style="display: none;">
  <button onclick="nextStep()">See your input</button>
</div>
<p id="name"></p>
<p id="city"></p>
<p id="mobile"></p>  

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

1. Данные, собранные для имени, города и мобильного телефона, в этом случае отображаться не будут. Вместо этого это [object HTMLParagraphElement].

2. @p_w_hh Загляни в область JavaScript

3. @p_w_hh У вас есть рабочий пример перед вами. Внимательно посмотрите на мой комментарий и изменения, которые я внес. Это работает так, как я сделал это в сниппете, нажмите выполнить фрагмент кода. Если он не отображал значения, это означает, что вы не объявляли переменные сначала вне функций, как я, а затем заполняли их данными внутри. Также порядок вещей очень важен.

4. Блестяще! Я понял, вероятно, самой большой ошибкой было то, что я запутался между глобальной и локальной переменной, я чувствую себя так плохо. Большое вам спасибо за прояснение этого

5. @p_w_hh Нет проблем, это весь процесс обучения. Область видимости JS может быть сложной при запуске и даже позже для более сложных сборок. Могу я спросить, почему вы приняли ответ с наименьшим количеством голосов, который на самом деле не решает всех проблем, с которыми вы сталкиваетесь, и это не лучшее решение вашей проблемы в целом? Это будет сбивать с толку любого, кто читает эту тему…

Ответ №3:

создайте div

 <div id="seeYourInputButton"></div>
  

после получения запроса напишите это

 document.getElementById("seeYourInputButton").innerHTML = "<button onClick="nextStep()" >See your Input</button>