Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите с Javascript кодом (https://javascript.ru/forum/misc/70749-pomogite-s-javascript-kodom.html)

Omnia 29.09.2017 19:00

Помогите с Javascript кодом
 
Добрый вечер. Написал код игры виселица. Возникли проблемы. Если значение переменной numberAttempt поменять на > 5, то игра начинает работать некорректно. Помогите пожалуйста разобраться с чем это связано. Заранее огромное спасибо.
P.S Если неправильно оформил тему, что-то не написал, тема не отражает сути и т.д. Сообщите пожалуйста, буду признателен.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hangman!</title>
</head>
<body>
<h1>Hangman!</h1>

<script>
var pickWord = function () {
var words = ["программа", "детерминант", "обезьяна" , "кошка", "компьютер", "волна", "портрет", "корабль", "космос", "интернет", "цепочка", "дротик", "человек", "мандарин", "машина", "автобус", "автомобиль", "озарение", "идея", "страх", "ужас", "номер", "комната", "оружие", "балкон", "терраса",  "картина", "светофор", "семафор", "индейка", "курица", "фонарь", "рыба", "фотография", "строка", "огонь", "вода", "сказка", "орудие", "броня", "инновация", "пруд", "речка", "чудовище", "шапка", "нитка", "бочка", "мусор", "останки", "клавиатура", "процессор", "блок", "видеокарта", "наушники", "портфель", "банка", "мозг", "рука", "конфета"];
return words[Math.floor(Math.random() * words.length)];
};

var setupAnswerArray = function (word) {
var answerArray = []
for (var i = 0; i < word.length; i++) {
answerArray[i] = "_";
}

return answerArray;
};

var showPlayerProgress = function (answerArray) {
alert(answerArray.join(" "));
};

var getGuess = function () {
return prompt("Угадайте букву или нажмите Отмена для выхода из игры");
};

var updateGameState = function (guess, word, answerArray) {
var appearances = 0;
for (var j = 0; j < word.length; j++) {
if (word[j] === guess) {
answerArray[j] = guess;
appearances++;
}
}

return appearances;
};

var showAnswerAndCongratulatePlayer = function (answerArray, numberAttempt) {
showPlayerProgress(answerArray);

};

var word = pickWord();
var answerArray = setupAnswerArray(word);
var remainingLetters = word.length;
var numberAttempt = 5;

while (remainingLetters > 0 && numberAttempt > 0) { showPlayerProgress(answerArray); var guess = getGuess();
if (guess === null) {
break;
} else if (guess.length !== 1) {
alert("Пожалуйста, введите только одну букву.");
} else {
numberAttempt--;
guess = guess.toLowerCase();
var correctGuesses = updateGameState(guess, word, answerArray);
remainingLetters -= correctGuesses;
remainingLetters--;
}
}

alert(answerArray.join(" "));

if (numberAttempt > 0) {
alert("Отлично! Было загадано слово " + word);
} else {
alert("Плохо! Вас повесили! Было загадано слово " + word);
}

showAnswerAndCongratulatePlayer(answerArray);
</script>

</body>
</html>

рони 29.09.2017 19:05

Omnia,

[HTML run]ваш код[/HTML]

Omnia 29.09.2017 19:14

рони,
благодарю.

рони 29.09.2017 19:22

Omnia,
какие правила, в чём некорректно?

рони 29.09.2017 19:26

Omnia,
может строка 65 лишняя?

Omnia 29.09.2017 19:29

рони, если выбирать одну и тужу букву определенное кол-во раз (4-6), при значение переменной numberAttempt > 5 (если кол-во попыток будет 6 и больше ), то выдаст, что якобы слово угадано ( хотя это не так).

Omnia 29.09.2017 19:32

рони,
Ого, вроде теперь все работает корректно. Огромное спасибо!

рони 29.09.2017 19:32

Omnia,
тогда введите проверку -- такая буква уже не входит в слово

рони 29.09.2017 19:38

Цитата:

Сообщение от Omnia
Ого, вроде теперь все работает корректно.

:nono:
Цитата:

Сообщение от рони
введите проверку -- такая буква уже не входит в слово


рони 29.09.2017 19:44

Omnia,
протестируйте этот вариант
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hangman!</title>
</head>
<body>
<h1>Hangman!</h1>

<script>
var pickWord = function () {
var words = ["программа", "детерминант", "обезьяна" , "кошка", "компьютер", "волна", "портрет", "корабль", "космос", "интернет", "цепочка", "дротик", "человек", "мандарин", "машина", "автобус", "автомобиль", "озарение", "идея", "страх", "ужас", "номер", "комната", "оружие", "балкон", "терраса",  "картина", "светофор", "семафор", "индейка", "курица", "фонарь", "рыба", "фотография", "строка", "огонь", "вода", "сказка", "орудие", "броня", "инновация", "пруд", "речка", "чудовище", "шапка", "нитка", "бочка", "мусор", "останки", "клавиатура", "процессор", "блок", "видеокарта", "наушники", "портфель", "банка", "мозг", "рука", "конфета"];
return words[Math.floor(Math.random() * words.length)];
};

var setupAnswerArray = function (word) {
var answerArray = []
for (var i = 0; i < word.length; i++) {
answerArray[i] = "_";
}

return answerArray;
};

var showPlayerProgress = function (answerArray) {
alert(answerArray.join(" "));
};

var getGuess = function () {
return prompt("Угадайте букву или нажмите Отмена для выхода из игры");
};

var updateGameState = function (guess, word, answerArray) {
var appearances = 0;
for (var j = 0; j < word.length; j++) {
if (word[j] === guess && answerArray[j] !== guess) {
answerArray[j] = guess;
appearances++;
}
}

return appearances;
};

var showAnswerAndCongratulatePlayer = function (answerArray, numberAttempt) {
showPlayerProgress(answerArray);

};

var word = pickWord();
var answerArray = setupAnswerArray(word);
var remainingLetters = word.length;
var numberAttempt = 5;

while (remainingLetters > 0 && numberAttempt > 0) { showPlayerProgress(answerArray); var guess = getGuess();
if (guess === null) {
break;
} else if (guess.length !== 1) {
alert("Пожалуйста, введите только одну букву.");
} else {
guess = guess.toLowerCase();
var correctGuesses = updateGameState(guess, word, answerArray);
remainingLetters -= correctGuesses;
if(!correctGuesses) numberAttempt--;
alert("осталось " +numberAttempt+ " попыток");
}
}

alert(answerArray.join(" "));

if (numberAttempt > 0) {
alert("Отлично! Было загадано слово " + word);
} else {
alert("Плохо! Вас повесили! Было загадано слово " + word);
}

showAnswerAndCongratulatePlayer(answerArray);
</script>

</body>
</html>

Omnia 29.09.2017 20:06

рони,
Отлично! Все работает. Еще раз спасибо.

Александр83 29.09.2017 20:58

Еще раз вечер добрый, подскажите как вывести с input (id) переменную без перезагрузки страницы?

<input id="proso_engine_02" value=""/>
<input id="proso_table_02" value=""/>

<?php
$ak_price_engine = $_POST['proso_engine_02'];
$ak_price_table = $_POST['proso_table_02'];

echo $ak_price_engine;
echo $ak_price_table;
?>

рони 29.09.2017 21:47

Александр83,
это лучше к специалистам php

Александр83 30.09.2017 11:53

хорошо! а если все таки скриптом в этом коде?
<input id="proso_engine_02" value="1"/>
<input id="proso_table_02" value="2"/>
<p>тут значение value</p>

Александр83 30.09.2017 12:00

простите немного по другому, во так!
<input id="proso_engine_02" value="1"/>
<input id="proso_table_02" value="2"/>

<p>тут значение value от id="proso_engine_02"</p>
<p>тут значение value от id="proso_table_02"</p>

рони 30.09.2017 12:06

Александр83,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">

  <script>
window.addEventListener('DOMContentLoaded', function() {
  var p =  document.querySelectorAll('p.temp');
 [].forEach.call(document.querySelectorAll('input.temp'), function(item,i) {
         item.addEventListener('input', function() {
             p[i].textContent = item.value;
         });
     });
    });
  </script>
</head>

<body>
<input id="proso_engine_02" value="1" class="temp"/>
<input id="proso_table_02" value="2" class="temp"/>

<p  class="temp">1</p>
<p  class="temp">2</p>

</body>
</html>

Александр83 30.09.2017 12:26

рони,
спасибо вам огромное!

Александр83 03.10.2017 05:32

Доброго времени суток!, подскажите как решить данную задачу?

<select width="100%" id="proso_table"> 
<option value="0" title="" price-table="0">по умолчанию</option> 
<option value="http://test_01.ru/" title="" price-table="100">Наименование №1 - сумма 100 руб.</option> 
<option value="http://test_02.ru/" title="" price-table="200">Наименование №1 - сумма 200 руб.</option> 
</select>
[JS] 
        document.querySelector('#proso_table').onchange = function() {
        var a = document.querySelector('#proso_table_01 a');
        a.href=this.value;
        a.textContent=this.value!='0'?'ссылка на контент':'';
        document.querySelector('#proso_table_02').value = this.options[this.selectedIndex].getAttribute('price-table');
   };
[/JS]
<div class="none_div" id="proso_table_01"><a target="_blank"></a></div>

<input id="proso_table_02"/>


Данный выше код - работает и выдает результаты, но проблема в том что - последнее значение от input нужно вывести в переменную php

переменная php - $ak_price_table

грубо по коду хотел решить его так -
<? echo $ak_price_table = '<input id="proso_table_02"/>';?>

но таким образом значение в переменную не сохраняются!
данная функция нужна для сложения результатов без перезагрузки страницы
к примеру сумма по умолчанию 100 руб + значение от выбранного инпута = итого:

Прошу помощь в данном вопросе - вознаграждение на пиво) гарантирую.

Александр83 03.10.2017 05:38

прошу прощения не правильно выставил JS
<select width="100%" id="proso_table">
<option value="0" title="" price-table="0">по умолчанию</option>
<option value="http://test_01.ru/" title="" price-table="100">Наименование №1 - сумма 100 руб.</option>
<option value="http://test_02.ru/" title="" price-table="200">Наименование №1 - сумма 200 руб.</option>
</select>

document.querySelector('#proso_table').onchange = function() {
        var a = document.querySelector('#proso_table_01 a');
        a.href=this.value;
        a.textContent=this.value!='0'?'ссылка на контент':'';
        document.querySelector('#proso_table_02').value = this.options[this.selectedIndex].getAttribute('price-table');
   };

<div class="none_div" id="proso_table_01"><a target="_blank"></a></div>
 
<input id="proso_table_02"/>

Александр83 03.10.2017 08:57

или подскажите, если нет данного решения, хоть как значение не в input
а div
document.querySelector('#proso_table').onchange = function() {
        var a = document.querySelector('#proso_table_01 a');
        a.href=this.value;
        a.textContent=this.value!='0'?'ссылка на контент':'';
        document.querySelector('#proso_table_02').value = this.options[this.selectedIndex].getAttribute('price-table');
   };

<div id="proso_table_02"/></div>

рони 03.10.2017 09:16

Александр83,
что не так?

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">

</head>

<body>
<select width="100%" id="proso_table">
<option value="0" title="" price-table="0">по умолчанию</option>
<option value="http://test_01.ru/" title="" price-table="100">Наименование №1 - сумма 100 руб.</option>
<option value="http://test_02.ru/" title="" price-table="200">Наименование №1 - сумма 200 руб.</option>
</select>
<script>
   document.querySelector('#proso_table').onchange = function() {
        var a = document.querySelector('#proso_table_01 a');
        a.href=this.value;
        a.textContent=this.value!='0'?'ссылка на контент':'';
        document.querySelector('#proso_table_02').value = this.options[this.selectedIndex].getAttribute('price-table');
   };

</script>


<div class="none_div" id="proso_table_01"><a target="_blank"></a></div>





<input id="proso_table_02"/>


</body>
</html>

Александр83 03.10.2017 09:32

все верно работает, только с
<input id="proso_table_02"/>

не могу вывести переменную в php! выдает пустое значение
Как можно сделать вывод значения не в input а в div
<div id="proso_table_02"></div>

с возможностью передачи его на сервер по переменной $ak_price_table

рони 03.10.2017 10:10

Цитата:

Сообщение от Александр83
не могу вывести переменную в php!

не понимаю
Цитата:

Сообщение от Александр83
в div

Цитата:

Сообщение от рони
value = this.options

innerHTML вместо value строка 21

laimas 03.10.2017 10:27

Александр83,
JS на клиенте, РНР на сервере. Каким образом js-переменные могут оказаться на сервере? Они на нем в любом случае не появятся. Можно отправить на сервер методом POST/GET значения полей формы, значения js-переменных.

А скрестить РНР с JS вот так <? echo $ak_price_table = '<input id="proso_table_02"/>';?> не получится.

Александр83 03.10.2017 10:48

Цитата:

Сообщение от laimas (Сообщение 466352)
Александр83,
JS на клиенте, РНР на сервере. Каким образом js-переменные могут оказаться на сервере? Они на нем в любом случае не появятся. Можно отправить на сервер методом POST/GET значения полей формы, значения js-переменных.

А скрестить РНР с JS вот так <? echo $ak_price_table = '<input id="proso_table_02"/>';?> не получится.

да это я знаю, я это писала для примера...суть что мне нужно!!....

POST/GET не походит, что то другое нужно, а так все печально!!!, придется искать обход.... спасибо за ответ.

Александр83 03.10.2017 10:52

рони,
вам спасибо, много раз выручали, напишите в личку закину на телефон или яндекс.

laimas 03.10.2017 11:23

Цитата:

Сообщение от Александр83
POST/GET не походит, что то другое нужно

Это почему не подходит и что такое другое? Есть и другие методы передачи, но вам они точно ни к чему.

Александр83 03.10.2017 11:41

Хорошо, а можно тогда взять эту переменную посредством GET, без перезагрузки страницы?, я не сильна в php да и js тоже, поэтому не судите строго!

рони 03.10.2017 11:45

Александр83,
Ajax запрос методом GET

рони 03.10.2017 11:46

Александр83,
https://learn.javascript.ru/ajax

Александр83 11.10.2017 13:44

Доброго вечера! Помогите с этим....
<form method="POST" action="#" id="form_engine" name="form_engine">
<select class="proso_engine" width="100%" id="proso_engine" name="engine_php">
<option value="0" title="" price-engine="0">по умолчанию</option> 
<option value="ссылка на контент 1" title="" price-engine="цена с сервера 1" product="Имя продукта с сервера 1">Имя продукта с сервера 1&nbsp;-&nbsp;цена с сервера 1&nbsp;руб</option> 
<option value="ссылка на контент 2" title="" price-engine="цена с сервера 2" product="Имя продукта с сервера 2">Имя продукта с сервера 2&nbsp;-&nbsp;цена с сервера 2&nbsp;руб</option> 
</select>


Нужно отправить данные на сервер файл ajax.handler.php по атрибутам (price-engine, product)

вот скрипт но он не работает...(((

$("select.proso_engine").change(function() {
    alert("Тест формы!");
    $.ajax({
            type: "POST",
            url: '/ajax.handler.php',
            data : { proso_engine: $(this).val() },
        });
});


HELP!!!

Александр83 11.10.2017 16:17

рони,
можете мне с помочь, не могу сообразить как написать JS правильно..?

рони 11.10.2017 16:51

Цитата:

Сообщение от Александр83
не могу сообразить

тоже самое

Александр83 16.10.2017 03:57

рони, здравствуйте! подскажите как, вывести переменную в нижней строке?
<script>
    document.querySelector('#proso_engine').onchange = function() {
        var a = document.querySelector('#proso_engine_01 a');
        a.href=this.value;
        a.textContent=this.value!='0'?'<?=GetMessage("AK_03");?>':'';
        document.querySelector('#proso_engine_02').innerHTML = this.options[this.selectedIndex].getAttribute('price-engine');
        var engine = "вывести переменную от выбранного option атрибут - [COLOR="Red"]price-engine[/COLOR]????
        };
</script>

заранее спасибо.

рони 16.10.2017 04:03

Александр83,
не понимаю

Александр83 16.10.2017 04:15

document.querySelector('#proso_engine').onchange = function() {
        var a = document.querySelector('#proso_engine_01 a');
        a.href=this.value;
        a.textContent=this.value!='0'?'<?=GetMessage("AK_03");?>':'';
        document.querySelector('#proso_engine_02').innerHTML = this.options[this.selectedIndex].getAttribute('price-engine');
        var engine = ???
        };

дописать в переменную engine значение атрибута price-engine

чтобы потом эту переменную передать в

document.write(engine);

Александр83 16.10.2017 04:17

рони,
???

рони 16.10.2017 04:51

Александр83,
var engine = this.options[this.selectedIndex].getAttribute('price-engine');

либо вы просите то что у вас есть, либо вас не понимаю, в document.write уже ничего не передать, document.write используют только при загрузке страницы, смотрите про innerHTML или value

Александр83 18.10.2017 11:27

Здравствуйте! Подскажите как правильно сложить арифметически три переменных?
var head_itog = '<?=intval($arResult["CURRENT_HEAD_PRICE"])?>';
        var table_itog = this.options[this.selectedIndex].getAttribute('price-table');
        var engine_itog = this.options[this.selectedIndex].getAttribute('price-engine');
        var summ_comp = head_itog + engine_itog;
        $("#result_02").append(summ_comp);


также к примеру переменные с атрибутов равны (head_itog = 100, table_itog = 200, engine_itog = 300)
значения здесь могут быть разные - это пример!

если как есть то всё отображается так 100200300, мне соответственно необходимо все сложить = и получить общую сумму.

Александр83 18.10.2017 11:36

также интересен вопрос сброса кеша при каждой подгрузки данного JS?


Часовой пояс GMT +3, время: 19:18.