2010-07-17 25 views
5
<a href="<?=$rowz[0]?>" onClick="countLinks('<?=$row[6]?>','<?=$indexl?>')">[Link <?=$j++?>]</a> 

El problema es que no funciona con el botón central en IE o Firefox. De hecho, el countLinks usando el botón central se llama solo con cromo.Problema con onClick() y botón central en el mouse

Creo que necesito una función Jquery como mouseup evento, simplemente no sé cómo llamar a esa función, que llama a countLinks con esos parámetros parámetros.

¿Algún ayuda?

+1

+ 1 para ** rowz **. 1337! – jAndy

+0

posible duplicado de [Desencadenar evento onclick usando clic medio] (http://stackoverflow.com/questions/1795734/triggering-onclick-event-using-middle-click) – rds

Respuesta

6

Tienes razón. Necesita un evento mousedown o mouseup para determinar en qué botón del mouse se hizo clic realmente.

Pero antes que nada, debe deshacerse de ese controlador de eventos en línea onclick y seguir el brillante camino de discreto javascript.

Thatfor necesita dar a ese ancla una etiqueta id o class para identificarla (Por supuesto, también puede optar por seleccionar ese anclaje con un selector css). Asumamos que hemos añadido una clase con el nombre myClazzz :)

javascript:

$(function(){ 
    $('.myClazzz').bind('mouseup', function(e){ 
     switch(e.which){ 
      case 1: 
       alert('Left Mouse button pressed.'); 
      break; 
      case 2: 
       alert('Middle Mouse button pressed.'); 
      break; 
      case 3: 
       alert('Right Mouse button pressed.'); 
      break; 
      default: 
       alert('You have a strange Mouse!'); 
     } 
    }); 
}); 

La propiedad which dentro de un controlador de eventos mousedown/mouseup contendrá un número que indica qué botón del ratón se ha hecho clic.

+2

+1 pero ¿por qué no hacer clic? También puede ver si el botón que se hizo clic está a la izquierda, en el centro o a la derecha ... El mousedown mouseup puede comportarse de manera diferente navegador cruzado. – Sinan

+0

@Sinan Y .: ese evento javascript 'click' combina' mousedown' + 'mouseup' y se dispara solo con los clics del botón izquierdo. – jAndy

+0

uhm ... ¿entonces tengo que poner para cada caso (1-2-3) una copia de la misma función? y ¿cómo puedo pasar parámetros (como $ row [6] y $ indexl) a esa función? – markzzz

2

Aquí hay una solución rápida para usted, mediante el uso de algunos html5 attributes ... En realidad, también era posible antes de html5 pero no validación.

Me gustaría crear los enlaces de la siguiente manera:

<a class="myClazzz" href="<?=$rowz[0]?>" data-row="<?=$row[6]?>" data-index="<?=$indexl?>">...</a>

_here ponemos a sus parámetros data atributos

y escribe los js como este:

$(function(){ 
    //use mouseup, then it doesn't matter which button 
    //is clicked it will just fire the function 
    $('.myClazzz').bind('mouseup', function(e){ 
     //get your params from data attributes 
     var row = $(this).attr("data-row"), 
      index = $(this).attr("data-index"); 

     //and fire the function upon click 
     countLinks(row,index); 
    }); 
}); 
//don't forget to include jquery, before these lines;) 

Espero que esto funcione ou t. Sinan.

PSmyClazzz -> créditos va a Jandy :)

+0

uoo. ... nunca antes visto esa sintaxis en el enlace (me refiero a data-var stat). Necesito aprenderlo :) mañana verificaré esa función, ahora en Italia (3.00 a.m.) ¡es un poco tarde! tnx man – markzzz

+4

FYI: '$ (this) .data ('row')' es lo mismo que '$ (this) .attr ('data-row')' – WildlyInaccurate

1

El comportamiento de este es bastante variable por el navegador. Ver https://code.google.com/p/chromium/issues/detail?id=255#c106. De acuerdo con eso, por los que preguntaste:

  • "IE no se desencadena un evento de clic, si el objetivo es un enlace, pero se dispara si se hace clic en otro elemento, incluso si es un descendiente de un enlace."

  • "Gecko siempre activa un evento de clic en el documento que burbujea y tiene como destino el elemento al que se hace clic."

Para Firefox, por lo que puede hacer:.

$(document).click(
    function (evt) { 
    // ... evt.which === 2 means middle click 
    } 
); 

que es una especie de truco (Normalmente se escucha a eventos en el propio enlace), pero funciona

Cuestiones relacionadas