Executando ação repetidamente em um clique

Eu não sei como colocar isso em palavras, por favor, tenha paciência comigo.

Eu tenho um teclado virtual. Nele há um botão “backspace” (div) que apaga um caractere em cada clique. Eu quero que seja mais realista. então a questão é “Como eu excluo vários caracteres se o usuário estiver pressionando o mouse para baixo (ou seja, o mouse é pressionado continuamente e o usuário não levanta o dedo do mouse)”

1
2
3
4
5
6
7
8
9
0
Backspace
CALL
/*also the jquery for it(the one ive been using till now is),caret is the fn for setting caret position*/ $("#dialpadbackspace").click(function() { $('#dialpadentry').focus(); var init = $("#dialpadentry").val(); var start = $("#dialpadentry")[0].selectionStart; var stop = $("#dialpadentry")[0].selectionEnd; if (start == stop) { var substr = init.substring(0, start); var newsubstr = init.substring(0, start - 1); var finale = init.replace(substr, newsubstr); $("#dialpadentry").val(finale); $('#dialpadentry').caret(start - 1); } else { var substr = init.substring(start, stop); var finale = init.replace(substr, ''); $("#dialpadentry").val(finale); $('#dialpadentry').caret(start); }

Basicamente, no mousedown, inicie um intervalo que chame uma function a cada x milissegundos que remove um caractere da discagem. Você já tem duas excelentes respostas, então vou postar um rápido jsfiddle que eu fiz.

http://jsfiddle.net/EB29c/

Confira setInterval . mousedown evento mousedown a setInterval , armazene o ID em algum lugar e o evento mouseup em clearInterval .

Certifique-se de cobrir os casos de borda. Por exemplo, se o usuário clicar em seu backspace, arrastará o mouse para fora sem levantar o botão do mouse. onMouseOut precisará estar vinculado ao clearInterval . Pode haver outros casos de borda também.

tente isso

 $(function () { var doBackspace; $("#dialpadbackspace").mousedown(function(e) { doBackspace = setInterval('$("#dialpadentry").val($("#dialpadentry").val().substr(0, $("#dialpadentry").val().length-1));',100); }); $("#dialpadbackspace").mouseup(function(e) { clearInterval(doBackspace); }); })();