Pouvez-vous définir un intervalle sur les clics de bouton?
-
24-09-2019 - |
Question
$('.button').click();
Le code ci-dessus fonctionne très bien à cliquer sur tous les boutons sur la page à la fois, mais je suis en train de tirer de clics ou toutes les demi-seconde ou jusqu'à ce que l'objet jQuery a i.e. en boucle.
$(function(){
$('.button').each(function(){
setInterval('$(this).click()', 500);
});
});
Quelqu'un peut me dire comment je peux le faire? le code ci-dessus ne fonctionne évidemment pas. Est-ce que je manque quelque chose?
La solution
Ne pas utiliser des chaînes dans setInterval()
ou setTimeout()
. Toujours passer des objets de fonction:
$(function() {
$('.button').each(function(){
var button = $(this);
setInterval(function() {button.click();}, 500);
});
});
EDIT: Si vous voulez simplement déclencher un clic, cela peut aussi être exprimé plus simplement (grâce icambron):
$(function() {
$('.button').each(function(){
setInterval($(this).click, 500);
});
});
Autres conseils
Qu'en est-ce?
setInterval(function(){ $('.button').click();},500);
$(function(){
var buttons = $('.button');
var len = buttons.length;
var intr = new Array();
buttons.each(function(i){
var $this = $(this);
var timeClick = function(){
if(i < len ){
$this.click();
}
else{
clearInterval(intr[i]);
}
};
intr[i] = setInterval(timeClick, 500);
});
});
Vous pouvez construire une fonction pour exécuter les clics de manière séquentielle, un clic tous les N
spécifié délai millisecondes, itérer les éléments appariés un par un:
Utilisation:
clickQueue($('.button'), 500);
La fonction:
var clickQueue = function ($els, timeout) {
var n = $els.length, i = 0;
function click () { // internal function
$els.eq(i++).click(); // click the element and increment i
if (i < n){
setTimeout(click, timeout); // execute again if possible
}
}
click(); // invoke for first time
};