#javascript #jquery #css
#javascript #jquery #css
Вопрос:
Новое в JS и jQuery — работа над игрой в качестве упражнения.
У меня есть «кнопка», которой я назначил событие с помощью jQuery.
Эта кнопка изменяет некоторые объекты на экране на красный цвет, а затем пользователь должен щелкнуть по красным.
Когда я пишу код, подобный этому:
$("button").click(turnObjectsRed);
if (~someobjects~ are red){
do xyz
}
В результате назначается событие click, а затем JS вычисляет оператор if, который, конечно, является ложным, потому что я еще не нажал на кнопку.
Я знаю, что мог бы переместить все аспекты игры внутри функции события щелчка, но моя цель — иметь:
Кнопка -> изменение среды -> вещи, которые происходят после изменения среды.
Как мне убедиться, что JS оценивает среду ПОСЛЕ нажатия кнопки?
Может быть, цикл while, который ожидает изменения логического значения?
Комментарии:
1. Вы должны выполнить логику внутри
turnObjectsRed
метода или подключить другой прослушиватель событий щелчка. Прослушиватели событий выполняются в том порядке, в котором они подключены.2. Вам нужно разобраться в программировании, основанном на событиях. Все, что происходит в результате того, что пользователь что-то делает, должно выполняться в обработчике событий.
3. Цикл while не будет работать. События не обрабатываются до тех пор, пока JavaScript не вернется в цикл событий браузера. Цикл while заблокирует приложение, переменные не изменятся. Вы могли бы сделать это с
setInterval
помощью этого, периодически проверяя переменную, но это обычно не одобряется.4. @Barmar конечно! Это определенно имело для меня гораздо больше смысла, поскольку я выполнил это упражнение. Я полагаю, что мои инстинкты, что это все равно должно быть частью обработки событий, были правильными.
Ответ №1:
Определите некоторую функцию для оценки среды, а затем вызовите ее после изменения цвета ваших объектов. Это позволяет легко переоценить среду и в других местах.
function evaluateEnvironment() {
if (someObjectsAreRed) {
// ... Do stuff
}
// Do other stuff
}
function turnSomeObjectsRed() {
// Turn objects red
evaluateEnvironment();
}
$('button').click(turnSomeObjectsRed);
Ответ №2:
Обработчики событий выполняются в порядке их добавления. Таким образом, вы можете добавить еще один после того, который что-то меняет, если хотите. В противном случае вставьте всю свою логику в первый обработчик событий.
var $test = $('#test');
$test.on('click', function(){
$test.toggleClass('red blue');
});
$test.on('click', function(){
if ($test.hasClass('blue')) {
console.log('you changed me to blue!');
}
});
.red { color: red; }
.blue { color: blue; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="test" class="red">My Text</div>