Ok, lo que pasa es:
1.al acer clik llamas a editar(1)
2.la funcion editar intenta asignar funciones a los eventos onmousedown y onmouseup, cosa que no puede porque cuando es llamada, el click ya se termino
3.al dar click en el div, intentas llamar a: setTimeout(tuFuncion(id), 2000), cosa que no resulta porque para pasar parametros tienes enviarl el primer argumento como una string
4.el codigo falla por que settimeout no reconoce tuFuncion(id), cuando deberia ser 'tuFuncion("'+id+'")' por ejemplo.
Aqui tienes este trozo de codigo, estudialo y dime si te va:
Código javascript
:
Ver original//Esta funcion recibe 2 argumentos, evento que es el evento por el cual fue llamada (onmouseup, onmousedown) e id, que es la id que le pasas
function esperar(evento, id){
evento = window.event || evento; //Compatibilidad con IE para reconocer el evento
if(evento.type == 'mousedown'){ //Si el evento es onmousedown entonces...
var funcion = 'editar("i'+id+'")'; //Creamos un string con la funcion editar mas el parametro id
esperar.tiempo = setTimeout(funcion, 2000); //Llamamos a settimeout de la manera correcta
}
else if(evento.type == 'mouseup'){ //Si el usuario suelta el click antes de tiempo...
clearTimeout(esperar.tiempo); //Cancelamos la llamada a a editar
}
}
//Justo como la tenias
function editar(id){
document.getElementById(id).value = "Ready!";
}
El HTML:
Código HTML:
<div id="1" style="width:400px; height:60px; border:1px solid red;" onmouseup="esperar(event, 1)" onmousedown="esperar(event, 1)"> Esto es un div cualquiera, al mantener el mouse por 2 segundos presionado saldra un mensaje </div>