Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.08.2021, 20:58
Профессор
Отправить личное сообщение для javascript_pupil Посмотреть профиль Найти все сообщения от javascript_pupil
 
Регистрация: 05.07.2009
Сообщений: 222

Как сделать так, чтобы onclick срабатывало только 1 раз?
Надо сделать защиту от дурака ошибки. Сейчас, при однократном нажатии кнопки значение поля изменяется. Очень желательно, чтобы при повторном нажатии изменений поля не происходило, либо, если это невозможно, при повторном нажатии мыши (скажем более 1 раза) происходило некое событие, например, менялся цвет поля (это я сам сделаю - примера с alert будет достаточно).

Читал stackoverflow, но одобренных решений не нашел.
Ответить с цитированием
  #2 (permalink)  
Старый 21.08.2021, 21:32
Профессор
Отправить личное сообщение для javascript_pupil Посмотреть профиль Найти все сообщения от javascript_pupil
 
Регистрация: 05.07.2009
Сообщений: 222

Всем спасибо за внимание, нашел!

if (!clicked) {
// Set clicked to true
clicked = true;
}


Там ещё были варианты, но этого хватило.
Ответить с цитированием
  #3 (permalink)  
Старый 21.08.2021, 21:45
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

Но идеологически это не правильный вариант. Потому что бесполезное событие продолжает висеть.

Правильно делать так:
element.addEventElistener('click', function() {
  // ...
}, {
  once: true
})
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 21.08.2021, 21:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от javascript_pupil
onclick срабатывало только 1 раз?
element.addEventListener('click', function() {  } , {once : true});

https://learn.javascript.ru/introduction-browser-events
Ответить с цитированием
  #5 (permalink)  
Старый 21.08.2021, 22:55
Профессор
Отправить личное сообщение для javascript_pupil Посмотреть профиль Найти все сообщения от javascript_pupil
 
Регистрация: 05.07.2009
Сообщений: 222

Сообщение от Aetae
Потому что бесполезное событие продолжает висеть.
Оно может чему-то помешать или навредить?

Вам, экспертам javascript - хорошо, а мне далеко не всё понятно в ваших примерах. При этом в "if" я могу засунуть изменение цвета "псевдокнопки" (тег span), чтобы визуально было понятно, что она уже нажата.

Сейчас мой код выглядит так:
<script>
var clicked = false;

function example1() {

	if (!clicked) {
	// Set clicked to true
	clicked = true;

Здесь выполняем необходимые действия.

	}

}
</script>


Где должна быть указанная Вами и Вашим коллегой строка?
Ответить с цитированием
  #6 (permalink)  
Старый 21.08.2021, 23:36
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от javascript_pupil
Оно может чему-то помешать или навредить?
Не стоит оставлять то, что потом будет не нужно.

Сообщение от javascript_pupil
При этом в "if" я могу засунуть изменение цвета "псевдокнопки" (тег span), чтобы визуально было понятно, что она уже нажата.
Это можно сделать в этом же обработчике или в другом обработчике, который так же навесить после отработки первого события...

Т.е. использовать глобальную переменную для такого дела вообще не стоит.
Ответить с цитированием
  #7 (permalink)  
Старый 21.08.2021, 23:37
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от javascript_pupil
Где должна быть указанная Вами и Вашим коллегой строка?
После собственно определения элемента (в ДОМ), на который и будет навешиваться событие.
Ответить с цитированием
  #8 (permalink)  
Старый 21.08.2021, 23:41
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Как вариант...
<button id='element'>Тест</button>
<script>
element.addEventListener('click', function() {  
	alert('Меняем')
	element.addEventListener('click', function() {  
		alert('Нет')
	});
} , {once : true});
</script>
Ответить с цитированием
  #9 (permalink)  
Старый 22.08.2021, 06:00
Профессор
Отправить личное сообщение для javascript_pupil Посмотреть профиль Найти все сообщения от javascript_pupil
 
Регистрация: 05.07.2009
Сообщений: 222

Сообщение от ksa
Как вариант...
Но я не могу использовать "button", а при использовании "span" это не работает.
Ответить с цитированием
  #10 (permalink)  
Старый 22.08.2021, 08:52
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,708

Все работает со span
<span id='element'>Тест</span>
<script>
element.addEventListener('click', function() { 
    alert('Меняем')
    element.addEventListener('click', function() { 
        alert('Нет')
    });
} , {once : true});
</script>

Последний раз редактировалось voraa, 22.08.2021 в 08:54.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать чтобы меню в зависимости от разрешения экрана выполняло свои функции? miha2020 Мобильный JavaScript 2 05.06.2022 09:02
Как сделать так чтобы кнопка была не активна если в input1.value что-то находится? Vooody jQuery 2 12.08.2020 22:38
Как сделать так, чтобы значение переменной не возвращалось на исходное значение? E}|{uk Общие вопросы Javascript 1 21.12.2014 15:26
Как сделать чтобы sertimeout срабатывал 1 раз за все время перебывания пользователя Albinos4210 Events/DOM/Window 11 17.05.2013 17:23
Как сделать так чтобы при нажатии на лого, он возвращал на главную страницу. Severance Flash 2 01.04.2011 16:25