2017-11-23 1 views
0

Ich muss die Schaltfläche in einer Tabellenzelle ein-/ausblenden, wenn Strg unten und oben ist und die Maus über bzw. aus dem Element ist. So schrieb ich etwas wie folgt aus:Catch-Taste drücken, wenn die Maus über einem Element steht und sich nicht bewegt

$(document).keydown(function (event) { 
     if (event.which == 17) 
     { 
      showHideEditBtn(true); 
     } 
    }); 
    $(document).keyup(function (event) { 
     if(event.which == 17) 
     { 
      showHideEditBtn(false) 
     } 
    }); 

    function showHideEditBtn(ctrlPressed) 
    { 
     var tableCell = $('.mouseoverbtn').parent(); 
     if (tableCell != '' && tableCell != undefined) 
     { 
      $(tableCell).mouseenter(function() { 
       if(ctrlPressed) 
       { 
        $(this).find('button').show(); 
       } 
      }); 
      $(tableCell).mouseover(function() { 
       if (!ctrlPressed) { 
        $(this).find('button').hide(); 
       } 
       else { 
        $(this).find('button').show(); 
       } 
      }); 
      $(tableCell).mousemove(function() { 
       if (!ctrlPressed) { 
        $(this).find('button').hide(); 
       } 
       else { 
        $(this).find('button').show(); 
       } 
      }); 
      $(tableCell).mouseleave(function() { 
       $(this).find('button').hide(); 
      }); 
     } 
    } 

Das Problem hierbei ist, dass die Taste bleibt zeigen oder ausgeblendet, wenn die Maus über die Tabellenzelle ist aber nicht bewegt. Zum Beispiel, wenn ich den Knopf über diese Tabellenzelle mit gedrückter Strg-Taste bewege, zeigt es den Knopf an, aber wenn ich ctrl loslasse, bleibt der Knopf angezeigt, obwohl die ctrl-Taste losgelassen wird und dasselbe gilt auch für den umgekehrten Fall. Was kann das eigentlich bewirken, wenn die Maus über dem Element ist, sich aber NICHT bewegt?

P.S. wenn der cursor sich in die tischzelle bewegt, ist alles gut.

+0

Sie können nicht zuverlässig feststellen, ob sich die Maus in dem Moment bewegt, in dem Sie eine Taste drücken (oder im selben Moment, wenn ein Ereignis eintritt). – Teemu

+0

@Teemu Ich muss nicht erkennen, dass die Maus bewegt wird, muss ich erkennen, dass es über dem Element positioniert ist – SonOfAGun

+0

Das ist, was Ihr Titel sagt? Wie auch immer, Sie müssen die gesamte Logik überdenken, im Moment fügen Sie vier neue Listener jedes Mal hinzu, wenn der Benutzer die STRG-Taste drückt, und vier weitere, wenn der Benutzer die STRG-Taste loslässt. Früher oder später wird Ihre Seite an den verschiedenen Ereignissen ersticken. – Teemu

Antwort

0

ich es auf diese Weise löste:

$(document).keydown(function (event) { 
    var tableCell = $('.mouseoverbtn').parent(); 
    if(tableCell.length > 0 && (event.which == 17 || event.keyCode == 17)) 
    { 
     tableCell.mouseover(function() { 
      for (i = 0; i < tableCell.length; i++) { 
       $(tableCell[i]).find('button').show(); 
      } 
     }); 
     for (i = 0; i < tableCell.length; i++) { 
      if ($(tableCell[i]).is(':hover')) { 
       $(tableCell[i]).find('button').show(); 
      } 
      else { 
       $(tableCell[i]).find('button').hide(); 
      } 
     } 
    } 
}); 
$(document).keyup(function (event) { 
    var tableCell = $('.mouseoverbtn').parent(); 
    if(tableCell.length > 0 && (event.which == 17 || event.keyCode == 17)) { 
     tableCell.off('mouseenter'); 
     tableCell.off('mouseover'); 
     tableCell.find('button').hide(); 
    } 
}); 

EDITED: Wenn mehrere Elemente, die diese Tasten haben

0

Vielleicht suchen Sie nur dies zu tun?

var ok = false; 
$(window).keydown(e){ 
    if(e.ctrlKey)ok = true; 
}); 
$(window).keyup(){ 
    if(e.ctrlKey)ok = false; 
}); 
$(tableCell).each(i, e){ 
    var t = $(e), b = t.find('button'); 
    t.mousedown(function(){ 
    if(ok)b.toggle(); 
    }); 
}); 
Verwandte Themen