Foros del Web » Programando para Internet » Javascript »

perdida del foco en celda al mostrar div

Estas en el tema de perdida del foco en celda al mostrar div en el foro de Javascript en Foros del Web. Hola: Hacia tiempito q no publicaba algo en el foro Mi problema es el siguiente: Estoy mostrarndo un cuadro emergente con un div a traves ...
  #1 (permalink)  
Antiguo 27/12/2010, 07:47
 
Fecha de Ingreso: junio-2010
Mensajes: 59
Antigüedad: 13 años, 10 meses
Puntos: 5
perdida del foco en celda al mostrar div

Hola:
Hacia tiempito q no publicaba algo en el foro
Mi problema es el siguiente:
Estoy mostrarndo un cuadro emergente con un div a traves de los eventos de onmouseover para mostrar y onmouseout para ocultar, cuando estos eventos ocurren en una celda de una tabla.
Todo funciona bien, solo que cuando el puntero esta sobre una celda, y el div emergente se muestra y tapa el puntero, el div se oculta automaticamente, pq pierde el foco, pero cuando el puntero no es tapado por el div emergente, se muestra bien el div, y se oculta solo cuando muevo el puntero del mouse fuera de la celda. Este error solo me pasa en firefox, en los demas funca bien, no se oculta automaticamente el div cuando este tapa al puntero del mouse.
El codigo es sencillisimo:
Código PHP:
<td align="left" class='td-tabla' onmouseover="showdiv('<?php echo $doc->id ?>')" onmouseout="hidediv()">
                <?php echo $doc->tema ?>
</td>
.
.
.
<div id="flotante" class="detalle" ></div>
.
.
.
y el metodo showdiv:
Código PHP:
function showdivEject(id){
    
div=document.getElementById('flotante'); 
   
detalle=document.getElementById(id);
   
div.innerHTML=detalle.innerHTML
   div
.style.display='block';

y el metodo hidediv
Código PHP:
function hidediv() {
    
div document.getElementById('flotante');
    
div.style.display='none';

ahora, ¿pq no funciona del todo bien en firefox y en todos los demas si?¿incluso en iexplorer 6?
Gracias de antemano
  #2 (permalink)  
Antiguo 27/12/2010, 08:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: perdida del foco en celda al mostrar div

Código HTML:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <title>Documento sin t&iacute;tulo</title>
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  4. <script language="JavaScript" type="text/JavaScript">
  5.  
  6. function showdiv(id){
  7.    div=document.getElementById('flotante');
  8.    detalle=document.getElementById(id);
  9.    div.innerHTML=detalle.innerHTML
  10.    div.style.display='';
  11. }
  12. function hidediv() {
  13.     div = document.getElementById('flotante');
  14.     div.style.display='none';
  15. }  
  16.  
  17.   </script>
  18. <style type="text/css">
  19. <!--
  20. #flotante {
  21.     background-color: #FF0000;
  22.     position: absolute;
  23.     left: 0px;
  24.     top: 0px;
  25.     right: 0px;
  26.     bottom: 0px;
  27.    
  28. }
  29. -->
  30. </head>
  31.  
  32.   <tr>
  33.     <td id="c1" onmouseover="showdiv(this.id)" onmouseout="hidediv()">1</td>
  34.     <td id="c2"  onmouseover="showdiv(this.id)" onmouseout="hidediv()">2</td>
  35.   </tr>
  36.   <tr>
  37.     <td id="c3"  onmouseover="showdiv(this.id)" onmouseout="hidediv()">3</td>
  38.     <td id="c4"  onmouseover="showdiv(this.id)" onmouseout="hidediv()">4</td>
  39.   </tr>
  40. <div id="flotante" style="display:none" >123</div>
  41. </body>
  42. </html>

A mi no me desaparece en firefox!!!...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 27/12/2010, 09:31
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: perdida del foco en celda al mostrar div

Probá con esto, aunque no creo que sea el problema:

Código Javascript:
Ver original
  1. function hidediv() {
  2.     var div = document.getElementById('flotante');
  3.     div.style.display='none';
  4. }
  #4 (permalink)  
Antiguo 28/12/2010, 02:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: perdida del foco en celda al mostrar div

Igual te he hecho perder tiempo, no consigo que vuelva a actuar como lo hacia ayer cuando te respondí el post.

Lo que veo ahora es que al mover el mouse también desaparece en IE6, aquí no puedo probar con nada más.

De hecho la lógica dice que el evento onMouseOut se lance puesto que se ha interpuesto una capa.

Si sitúas el vértice superior izquierdo de la capa justo al lado del cursor podría funcionarte...así mantendrías el foco en la celda.


Código HTML:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <title>Documento sin t&iacute;tulo</title>
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  4. <script language="JavaScript" type="text/JavaScript">
  5. function showdiv(e,id){
  6.     var x = e.clientX;
  7.     var y = e.clientY;
  8.    var div=document.getElementById('flotante');
  9.    detalle=document.getElementById(id);
  10.    div.innerHTML=detalle.innerHTML
  11.    div.style.left=x+4;
  12.    div.style.top=y+4;
  13.    div.style.display='';
  14. }
  15. function hidediv() {
  16.     var div = document.getElementById('flotante');
  17.     div.style.display='none';
  18. }  
  19.  
  20.   </script>
  21. <style type="text/css">
  22. <!--
  23. #flotante {
  24.     background-color: #FF0000;
  25.     position: absolute;
  26. }
  27. -->
  28. </head>
  29.  
  30.   <tr>
  31.     <td id="c1" onmouseover="showdiv(event,this.id)" onmouseout="hidediv()">1</td>
  32.     <td id="c2"  onmouseover="showdiv(event,this.id)" onmouseout="hidediv()">2</td>
  33.   </tr>
  34.   <tr>
  35.     <td id="c3"  onmouseover="showdiv(event,this.id)" onmouseout="hidediv()">3</td>
  36.     <td id="c4"  onmouseover="showdiv(event,this.id)" onmouseout="hidediv()">4</td>
  37.   </tr>
  38. <div id="flotante" style="display:none" >123</div>
  39. </body>
  40. </html>
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 30/12/2010, 09:58
 
Fecha de Ingreso: junio-2010
Mensajes: 59
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: perdida del foco en celda al mostrar div

Gracias por la solución quimfv, ya estaba pensando antes una solución asi, pero no la había probado.
Funciona, pero no me funco en iexplore, porq no me reconoce el evento, asi q tuve q hacerlo de la sgte forma:
Código PHP:
<head>

<
script type="text/javascript" src="/jquery/jquery-1.4.2.min.js">

<
script language="JavaScript" type="text/JavaScript">
 $(
document).ready(function(){      //jquery
        
document.onmousemove=function(e){
           
setPosition(e)
        }
  });
var 
hilo
var py 0
var px 0
function setPosition(e){
    
evt=window.event || e
    py 
evt.clientY;
    
px evt.clientX;
}
function 
showdiv(id){
    
clearTimeout(hilo)
    
hilo setTimeout(function(){
        
showdivEject(id)
    }, 
500)
}
   
function 
showdivEject(id){    
    
div=document.getElementById('flotante');
    
detalle=document.getElementById(id);
    if(
detalle.innerHTML.length 0){
        
div.innerHTML=detalle.innerHTML
        div
.style.display='block';
        
div.style.top=( py 10 )+"px";
        
div.style.left=( px 10 )+"px";
    }
}

function 
hidediv() {
    
clearTimeout(hilo)
    
div document.getElementById('flotante');
    
div.style.display='none';
}
 
  
</script>
<style type="text/css">
<!--
.flotante {
   position:absolute;
    opacity: 0.85;
    display:none;
    font-family:Arial;
    font-size:12px;
    height:auto;
    width:auto;
    max-width: 50%;
    background-color:#f1f1f1;
    padding: 6px 6px 6px 6px;
    line-height: 15px;
    overflow: auto;
}
-->
</style>
</head>
<body>
<table>
  <tr>
    <td id="c1" onmouseover="showdiv(this.id)" onmouseout="hidediv()">1</td>
    <td id="c2"  onmouseover="showdiv(event,this.id)" onmouseout="hidediv()">2</td>
  </tr>
  <tr>
    <td id="c3"  onmouseover="showdiv(this.id)" onmouseout="hidediv()">3</td>
    <td id="c4"  onmouseover="showdiv(this.id)" onmouseout="hidediv()">4</td>
  </tr>
</table>
<div class="flotante" >
</div> 
</body> 

bueno lo que hace este codigo, es que cuando el puntero del mouse pase por una celda, se dispare un hilo que despues de 1/2 segundo muestre el cuadro emergente a un lado del puntero del mouse, siempre y cuando el puntero siga en la misma celda por al menos 1/2 segundo
funciona en todos lo exploradores, incluso en ieplorer 6

Etiquetas: celda, foco, perdida
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:31.