2009-12-20 25 views

Respuesta

24

En el evento mousedown(), este código inicia un temporizador repetitivo (cada 500ms en este ejemplo) que se cancela tan pronto como ocurre el evento mouseup(). Esto debe ser adaptable a lo que quiere:

var intervalId; 
$("#button").mousedown(function() { 
    intervalId = setInterval(do_something, 500); 
}).mouseup(function() { 
    clearInterval(intervalId); 
}); 

function do_something() { 
    // whatever 
} 

Ver setInterval() para obtener más información sobre cómo eliminar los temporizadores.

+1

Si desea que el evento ocurra de inmediato, Y cada 500 milisegundos, simplemente llame a 'do_something()' inmediatamente antes de llamar a setInterval. –

+0

@TylerCollier Gracias por señalar. Luego funciona como el evento click más la acción repetida. Muy útil. En mi caso también tuve que pasar parámetros, para esto tienes que asignar una función anónima: 'setInterval (function() {myfunction (valueA, valueB);}, 500);' –

+0

@TylerCollier alguien me puede decir por qué no esta parada? http://jsfiddle.net/oxpku7f1/1/ – Arbaaz

5

Utilizaría la función javascript setInterval() dentro de una función que se ejecuta con el mouse hacia abajo.

<input type="button" id="button" onmousedown="inter=setInterval(startAction, 1*1000);" 
onmouseup="clearInterval(inter);" value="click here" /> 

<script type="text/javascript"> 
    function startAction(){ 
     //whatever you want done 
    } 
</script> 
4

Veo un problema con las dos soluciones enumeradas anteriormente.

onmouseup solo se activa si el mouse se suelta mientras está sobre el botón. Si el usuario mantiene el mouse hacia abajo y luego retira el mouse antes de soltarlo, entonces clearInterval nunca se dispara, por lo que do_something disparará para siempre.

Debería agregar otro evento, "onmouseout", que también llame a clearInterval.

+1

Es cierto, pero por favor haga una respuesta completa agregando código de muestra. –

3
var intervalId; 
$("#button").mousedown(function() { 
    intervalId = setInterval(do_something, 500); 
}).mouseup(function() { 
    clearInterval(intervalId); 
}).mouseleave(function() { 
//this should help solve the problem that occurs when the mouse leaves the button while pressed down 
    clearInterval(intervalId); 
}); 

function do_something() { 
    // whatever 
} 
Cuestiones relacionadas