2015-08-13 5 views
9

Ich habe dieses Problem, wo ich divs ein- und ausblenden muss, wenn ich auf eine Tabellenzelle klicke. Ich möchte aber auch, dass die Benutzer Text auswählen und in der Zelle kopieren können, ohne die Informationen zu verbergen.OnClick-Ereignis bei der Textauswahl verhindern

Völlig offen, um das Design zu ändern, wenn nötig. :)

Hier eine Geige ist, die die Ausgabe

http://jsfiddle.net/k61u66ek/1/

Hier ist der HTML-Code in der Geige zeigt:

<table border=1> 
    <tr> 
     <td> 
      Information 
     </td> 
     <td onClick="toggleInfo()"> 
      <div id="information" style="display:none"> 
       More information that I want to select without hiding 
      </div> 
      <div id="clicktoshow"> 
       Click to show info 
      </div> 

     </td> 
    </tr> 
</table> 

Hier ist die javascript:

function toggleInfo() { 
    $("#clicktoshow").toggle(); 
    $("#information").toggle();  
} 

Jeder Vorschlag/beraten wird sehr geschätzt!

/Patrik

+3

Einfache Lösung Verwendung Doppelklick statt Klick sein wird. Überprüfen Sie http://jsfiddle.net/k61u66ek/2/ –

Antwort

18

Eine Option ist die type des Selection Objekt durch window.getSelection zurückgegeben zu überprüfen:

function toggleInfo() { 
    var selection = window.getSelection(); 
    if(selection.type != "Range") { 
     $("#clicktoshow").toggle(); 
     $("#information").toggle(); 
    } 
} 

http://jsfiddle.net/k61u66ek/4/

aktualisieren

Wenn der Browser Sie Targeting aussetzen keine type Eigenschaft auf dem Selection Objekt dann können Sie testen gegen die Länge des gewählten Wertes statt:

function toggleInfo() { 
    var selection = window.getSelection(); 
    if(selection.toString().length === 0) { 
     $("#clicktoshow").toggle(); 
     $("#information").toggle(); 
    } 
} 

http://jsfiddle.net/k61u66ek/9/

, die ihrerseits wiederum auf einen Boolcheck reduziert werden können: :

if(!selection.toString()) {

http://jsfiddle.net/k61u66ek/10/

+0

Dies funktioniert nicht für mich. – t00thy

+1

Danke @ t00thy, ich habe meine Antwort aktualisiert, um eine Lösung hinzuzufügen, wenn "Typ" nicht verfügbar ist. –

+0

Oder gibt es meine Lösung, mit dem Abfangen der Zeit auf Mausklick [http://jsfiddle.net/k61u66ek/15/](http://jsfiddle.net/k61u66ek/15/) ich 200 Millisekunden als Differenz zwischen klicken und einstellen Situation kopieren. Vielleicht wird es helfen. – t00thy

2

Sie könnten überprüfen, ob es eine Auswahl in dem Click-Ereignishandler gemacht ist:

window.getSelection().toString(); 
1

können Sie verwenden mouseup, mousedown und mousemove Ereignisse dieses Ziel zu erreichen:

DEMO

var isDragging = false; 
$("#clickshow") 
.mousedown(function() { 
    isDragging = false; 
}) 
.mousemove(function() { 
    isDragging = true; 
}) 
.mouseup(function() { 
    var wasDragging = isDragging; 
    isDragging = false; 
    if (!wasDragging) { 
     $("#information").toggle(); 
     $("#clicktoshow").toggle(); 
    } 
}); 

SOURCE

1

können Sie überprüfen, ob die ‚Informationen‘ div umgeschaltet wird:

function toggleInfo() { 
    if(document.getElementById('information').style.display == 'none'){ 
     $("#clicktoshow").toggle(); 
     $("#information").toggle(); 
    } else { 
     // do nothing 
    } 
} 

prüfen diese Fiddle

Verwandte Themen