2017-02-26 1 views
0

Ich habe eine Reihe von Schaltflächen, die den zugehörigen Inhalt anzeigen, wenn Sie darauf klicken oder die Maustaste gedrückt halten. Aber jetzt möchte ich, dass der Inhalt vorübergehend aktualisiert wird, wenn eine andere Schaltfläche gedrückt wird, während eine bereits angeklickt ist.Klicken Sie auf Inhalt anzeigen und Inhalt der Hover-Aktualisierung anzeigen

Das Problem ist also, wenn ich den Mauszeiger über den anderen Knopf halte, während einer bereits angeklickt ist, wird es den Inhalt davon anzeigen. Aber wenn meine Maus verlässt, wird sie nicht zu dem Inhalt von der Taste zurückkehren, die gerade geklickt hat.

meinen Code Siehe:

<div id="showcaseBttns"> 
    <a class="bttns" target="1">work 1</a> 
    <a class="bttns" target="2">work 2</a> 
    <a class="bttns" target="3">work 3</a> 
</div> 

<div id="main_left"> 
    <div id="work_main1" class="targetDiv">work 1</div> 
    <div id="work_main2" class="targetDiv">work 2</div> 
    <div id="work_main3" class="targetDiv">work 3</div> 
</div> 


var clicked = false; 

$('[id ^= "work"]').hide(); 

$('.bttns').click(function() { 

    clicked = !clicked; 
    $('.targetDiv').hide(); 
    $('#work_main' + jQuery(this).attr('target')).show(); 

}); 

$('.bttns').hover(
    function() { 
    $('#work_main' + jQuery(this).attr('target')).show() 
    }, 
    function() { 
    if (!clicked) { 
     $('#work_main' + jQuery(this).attr('target')).hide() 
    } else { 
     $('#work_main' + jQuery(this).attr('target')).show() 
    } 
    }); 

sehen meine Geige: https://jsfiddle.net/8fp62L9g/

+0

so dass Sie wollen immer 1 Ergebnis, das letzte schwebte oder angeklickt? –

+0

Wenn Sie auf die Schaltfläche 1 klicken, muss der Inhalt angezeigt werden. Wenn Sie die Taste 2 drücken, muss der Inhalt der Schaltfläche 2 angezeigt werden, bis Sie den Hover-Status verlassen. Ansonsten zeige einfach den Inhalt der angeklickten Schaltfläche – Junske

Antwort

1

Ist das, was Sie brauchen?

var $clicked; 
 

 
\t $('[id ^= "work"]').hide(); 
 

 
\t $('.bttns').click(function() { 
 
    var $newClicked = $(this), 
 
     newClicked = $newClicked.attr('target'), 
 
     oldClicked = $clicked && $clicked.attr('target'); 
 
     
 
    if (oldClicked && oldClicked === newClicked) { 
 
     $('#work_main' + newClicked).hide();  
 
     $clicked = undefined; 
 
     return; 
 
    } 
 
    
 
\t $clicked = $newClicked; 
 
\t $('.targetDiv').hide(); 
 
\t $('#work_main' + newClicked).show(); 
 

 
\t }); 
 

 
\t $('.bttns').hover(
 
\t function() { 
 
     var hovTarget = $(this).attr('target'); 
 
\t  $('#work_main' + hovTarget).show(); 
 
     if ($clicked && $clicked.attr('target') !== hovTarget) { 
 
     $('#work_main' + $clicked.attr('target')).hide(); 
 
     } 
 
\t }, 
 
\t function() { 
 
\t  $('.targetDiv').hide(); 
 
\t  $clicked && $('#work_main' +$clicked.attr('target')).show(); 
 
\t });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="showcaseBttns"> 
 
    <a class="bttns" target="1">work 1</a> 
 
    <a class="bttns" target="2">work 2</a> 
 
    <a class="bttns" target="3">work 3</a> 
 
</div> 
 

 
<div id="main_left"> 
 
    <div id="work_main1" class="targetDiv">work 1</div> 
 
    <div id="work_main2" class="targetDiv">work 2</div> 
 
    <div id="work_main3" class="targetDiv">work 3</div> 
 
</div>

+0

ja fast! aber es ist wie div work_main1 ist über die anderen divs regieren, wenn es im Zustand angeklickt ist. weil, wenn ich auf den anderen Divs schwebe, wird es nicht zeigen. wie kann ich die divs, die schweben können, übersteuern? – Junske

+0

Entschuldigung, ich habe dich nicht verstanden. Also, wenn div1 angeklickt wird und div2 schwebt - nur der Inhalt von div2 sollte erscheinen? – lavish

+0

In der Tat. Und wenn es nicht angezeigt wird, wird der Inhalt des div, auf den geklickt wurde, wieder angezeigt. – Junske

0

auf diese Weise versuchen.

var clickedId = null; 

$('[id ^= "work"]').hide(); 

$('.bttns').click(function() { 

    clickedId = jQuery(this).attr('target'); 
    $('.targetDiv').hide(); 
    $('#work_main' + jQuery(this).attr('target')).show(); 

}); 

$('.bttns').hover(
    function() { 
    $('#work_main' + jQuery(this).attr('target')).show() 
    }, 
    function() { 
     $('#work_main' + jQuery(this).attr('target')).hide() 
    if(clickedId!==null) { 
     $('#work_main' + clickedId).show() 
    } 
    }); 
+0

nicht an. es lässt die anderen divs aus wenn die taste geklickt wird – Junske