JavaScript на клик работает 1 раз - PullRequest
0 голосов
/ 15 мая 2018

Это мой скрипт - мой скрипт оповещения, когда кто-то трогает любое место на странице.Я пытаюсь выполнить оповещение только один раз, а не на каждом клике.

Это код, который я создал, который предупреждает в любое время.

$( document ).ready(function() {
var click_count = 0;

if (click_count == 0){

$('body').click(function(){

  alert();
  var click_count  = 1;
});



}
});

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

С простым JavaScript вы можете сделать

let clicked = false;

const clickOnce = () =>  {
  if (!clicked) {
    alert('clicked');
    clicked = true;
  }
};

document.body.addEventListener('click', clickOnce);
some body content

И вам даже не нужна переменная clicked для хранения состояния.Просто удалите event listener, как только он сработает.

const clickOnce = () =>  {
  alert('clicked');
  document.body.removeEventListener('click', clickOnce)
};

document.body.addEventListener('click', clickOnce);
some body content
0 голосов
/ 15 мая 2018

У вас есть if не в том месте.Вы хотите, чтобы он находился внутри обработчика щелчка (кода, который запускается при нажатии), а не за его пределами.Вам также необходимо удалить var из var click_count = 1;, чтобы вы использовали тот, который объявлен в обратном вызове ready, а не тот, который объявлен в обработчике click:

$(document).ready(function() {
    var click_count = 0;
    $('body').on("click", function() {
        if (click_count == 0) {
            alert("Hi there");
            click_count = 1;
        }
    });
});
Testing 1 2 3
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

(Вот работоспособная версия для мобильных телефонов, где стековые фрагменты не отображаются: http://output.jsbin.com/taropelopu)

Но ,Вместо того, чтобы использовать click_count, я бы предложил удалить обработчик событий после первого щелчка. Это можно сделать с помощью off, но в jQuery даже есть функция, специально предназначенная для добавления обработчика, который вы удаляете первымвремя его вызова: one (вместо on):

$(document).ready(function() {
    $('body').one("click", function() {
        alert("Hi there");
    });
});
Testing 1 2 3
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

(Запускаемая версия для устройств, где фрагменты стека не отображаются: http://output.jsbin.com/wivoroluzu)

...