Как вызывать функции от JS до HTML - PullRequest
0 голосов
/ 29 апреля 2020

Я, вероятно, далеко от цели, но я пытаюсь самообучаться JS и у меня возникают проблемы с правильными способами вызова функций и соотнесения их с HTML. Я не уверен, что мой пароль работает правильно. Любая помощь или мини-уроки высоко ценится

<body>
<div class="header">
<h1>Password Generator</h1>
</div>
<div class="viewer">
<p id="view">test</p>
</div>
<div class="content">
<button onclick="generate();">Generate</button>
</div>
<div class="footer">
<p></p>
</div>
 <script src="c:\tesweb\testjs.js"></script>
</body>
function password(){
 var retVal = "";
 var chars = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ#@$&!?";
 var length = 8;

for (var i = 0, n = chars.length; i < length; i++) {
  retVal += chars.charAt(Math.Floor(Math.random() * n));
  }
 return x = retVal;
}

function generate() {
    document.getElementById("view").innerHTML = x;
}

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Вам не нужно возвращать значение, так как оно ничего с этим не сделает. Если вы что-то вычисляете и вам нужно запустить функцию для получения значения, вы вернетесь. Для этого вы просто используете retVal для установки внутреннего HTML из view. Посмотрите на мой фрагмент для ответа. :)

function generate() {
    var length = 8,
        charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
        retVal = "";
    for (var i = 0, n = charset.length; i < length; ++i) {
        retVal += charset.charAt(Math.floor(Math.random() * n));
    }
    // After it's done, you just set the innerHTML of whatever element you want to display it
    document.getElementById("view").innerHTML = retVal;
}
<div class="header">
<h1>Password Generator</h1>
</div>
<div class="viewer">
<p id="view">test</p>
</div>
<div class="content">
<button onclick="generate();">Generate</button>
</div>
<div class="footer">
<p></p>
</div>
0 голосов
/ 29 апреля 2020

Один огромный совет: попробуйте инструменты отладки в вашем браузере (например, Консоль в Chrome). Это даст вам много информации.

Например, при запуске кода и нажатии кнопки «Создать» эта ошибка отображается в журнале консоли: «Uncaught ReferenceError: x не определено» *

Это имеет смысл, потому что в функции generate () вы используете x, но она там не определена. У вас также есть функция password (), но вы не используете / не вызываете ее.

Подумайте об этом так: функция часто получает вход, делает что-то с этим входом, а затем возвращает выход , Но функция будет запускаться только при вызове.

В вашем случае функция password () не получает входные данные, но генерирует случайную строку в качестве выходных.

Кому исправить ваш код, вам просто нужно вызвать функцию пароля (). Вы можете поместить результат в эту переменную 'x', если хотите (или в переменную с любым другим именем).

Ваша функция generate () будет выглядеть следующим образом:

function generate() {
    var x = password();
    document.getElementById("view").innerHTML = x;
}

Что же нам теперь делать? Мы устанавливаем переменную x на выход функции password () и затем отображаем ее как HTML для элемента с идентификатором 'view'.

Обратите внимание, что переменная x также может быть названа anything здесь.

Теперь давайте снова запустим код и снова проверим Chrome журнал консоли ... Новая ошибка: Uncaught TypeError: Math.Floor не является функцией

Ok Итак, мы делаем успехи. функция floor на самом деле должна быть в нижнем регистре (этаж против пола). Итак, давайте изменим это. И снова запустите код ...

И он работает!

Но даже при том, что он работает, вы не возвращаете вывод в функции password () правильным образом. вы должны просто return retVal; вместо return x = retVal;

В функции вы должны просто что-то вернуть, чтобы вывод можно было использовать или назначить переменной где-нибудь. Причина, по которой здесь также работает x = retVal, заключается в том, что он просто устанавливает x равным retVal, а затем возвращает x .. (вместо простого возврата retVal напрямую).

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

Вот полный код JS с исправлениями:

function password() {
  var retVal = "";
  var chars = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ#@$&!?";
  var length = 8;

  for (var i = 0, n = chars.length; i < length; i++) {
    retVal += chars.charAt(Math.floor(Math.random() * n));
  }
  return retVal;
}

function generate() {
  var x = password();
  document.getElementById("view").innerHTML = x;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...