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

Il problema è che non funziona con il tasto centrale su IE o Firefox. In effetti, lo countLinks utilizzando il pulsante centrale è chiamato solo con chrome.Problema con onClick() e tasto centrale sul mouse

Penso di aver bisogno di una funzione Jquery come mouseup evento, solo che non so come chiamare quella funzione, che chiama countLinks con quei parametri parametri.

Qualsiasi aiuto?

+1

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

+0

possibile duplicato di [Attivazione evento onclick tramite clic centrale] (http://stackoverflow.com/questions/1795734/triggering-onclick-event-using-middle-click) – rds

risposta

6

Hai ragione. È necessario un evento mousedown o mouseup per determinare quale pulsante del mouse è stato effettivamente selezionato.

Ma prima di tutto, è necessario sbarazzarsi di questo gestore di eventi in linea onclick e seguire la strada splendente di javascript discreto.

Per questo è necessario assegnare a tale ancoraggio un tag id o class per identificarlo (Naturalmente si può anche scegliere di selezionare quell'ancora con un selettore css). Assumiamo abbiamo aggiunto una classe con il nome 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!'); 
     } 
    }); 
}); 

Il which proprietà all'interno di un gestore di eventi mousedown/mouseup conterrà un numero che indica quale pulsante del mouse è stato cliccato.

+2

+1 ma perché non "clic"? Puoi anche vedere se il pulsante cliccato è lasciato, medio o destro ... Mouseup mouseup potrebbe comportarsi in modo diverso cross browser. – Sinan

+0

@Sinan Y .: l'evento javascript 'click' combina' mousedown' + 'mouseup' e si attiva solo con i clic del tasto sinistro. – jAndy

+0

uhm ... quindi ho bisogno di mettere per ogni caso (1-2-3) una copia della stessa funzione? e come posso passare parametri (come $ row [6] e $ indexl) a quella funzione? – markzzz

2

Ecco una soluzione rapida per voi, utilizzando alcuni html5 attributes ... In realtà era anche possibile prima di HTML5, ma non era la convalida.

mi piacerebbe creare i collegamenti, come di seguito:

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

_here mettiamo i parametri di data attributi

e scrivere il js come questo:

$(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;) 

Spero che questo funzioni t. Sinan.

PSmyClazzz -> crediti va a JANDY :)

+0

uoo. ..non ho mai visto prima quella sintassi sul link (intendo data-var stat). ho bisogno di impararlo :) domani controllerò la funzione, ora in italia (3:00) è un po 'tardi! tnx man – markzzz

+4

FYI: '$ (questo) .data ('row')' è uguale a '$ (this) .attr ('data-row')' – WildlyInaccurate

1

Il comportamento di questo è abbastanza variabile dal browser. Vedi https://code.google.com/p/chromium/issues/detail?id=255#c106. Secondo tale, di quelli hai chiesto:

  • "IE non si attiva un evento click se la destinazione è un collegamento, ma lo fa sparare se un altro elemento viene cliccato, anche se si tratta di un discendente di un collegamento."

  • "Gecko genera sempre un evento click sul documento che bolle e ha come targetizzare l'elemento su cui si fa clic."

Per Firefox, quindi si può fare:.

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

che è una specie di un trucco (normalmente si ascolta eventi sul link stesso), ma funziona

Problemi correlati