Имеют один и тот же обработчик кликов для множества разных радио кнопок - PullRequest
0 голосов
/ 08 ноября 2019

У меня много переключателей на моем сайте. И каждый из них имеет одинаковый обработчик кликов. Внутри обработчика я делаю ajax-вызовы и еще немного логики, которая может занять некоторое время. Итак, как я уже сказал, это тот же обработчик. Что на самом деле происходит, когда кто-то нажимает радиокнопку, поэтому код внутри обработчика будет выполнен, но очень быстро он нажимает другую радиокнопку, и код обработчика радиокнопки, нажатой первым, не выполняется полностью. Так что теперь снова происходит радио-событие щелчка, и снова этот код начинает выполняться. Как я могу предотвратить щелчок другой радиокнопки до полного выполнения кода обработчика.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019
<!DOCTYPE html>
<html>
<body>

<h1>The onclick Event</h1>

<button onclick="myFunction('demo1')">Click me1</button>

<button onclick="myFunction('demo2')">Click me2</button>

<button onclick="myFunction('demo3')">Click me3</button>

<button onclick="myFunction('demo4')">Click me4</button>

<p id="demo"></p>


<script>
function myFunction(text) {
    // stop for sometime if needed
    for (var i = 1; i <= 10; i++) {

        console.log(text);

        for (var j = 1; j <= 4000000000; j++) 
        {

        }
    }
    document.getElementById("demo").innerHTML = text;
}
</script>

</body>
</html>
0 голосов
/ 08 ноября 2019

Вы можете использовать внешнюю переменную, которая содержит true, если функция во время выполнения

var execution=false;

function action(radio) {
  console.log('try run');

  if(execution) { radio.checked = false; return };
  execution=true;
  
  console.log('execution starts: 5s');  
  setTimeout(()=> {
    console.log('execution ends');    
    execution=false;
  },5000)  
}
<input type="radio" onclick="action(this)">A
<input type="radio" onclick="action(this)">B
<input type="radio" onclick="action(this)">C
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...