3 Stimmen

Kann Internet Explorer Ereignisse an absolut positionierte Elemente binden?

Kann Internet Explorer Ereignisse an absolut positionierte Elemente binden?

Ich kann einen "Klick" nicht an ein Element binden, das ein anderes überlappt.

Ich habe viele verschiedene Möglichkeiten ausprobiert, hier ein paar Tests, die im IE nicht funktionieren:

//version 1:
$(".classHolder").click(function(){ alert( $(this).html() );  });

//version 2:
$(".classHolder").each(function(){ $(this).click(function(){ alert( $(this).html() );  }); });

//version 3:
$("#id3").click(function(){ alert( $(this).html() ); });

//version 4:
$("#id3").click(function(){ alert( $(this).html() ); });
$("#id3").trigger("click");

// in all trials I tested with and without:
// $("img").unbind();
// $("div").unbind();
// just to make sure no "ghost" events were bind into the elements but no success.

<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="application/javascript">
$(document).ready(function(){
   $("#id3").click(function(){ alert( $(this).html() ); });
   $("#id3").trigger("click");
});
</script>
</head>
<body>
<div id="id1" style="position:relative;">
<img id="id2" src="http://www.google.co.uk/intl/en_com/images/srpr/logo1w.png" style=";z-index:-1;"/>
<div id="id3" class="classHolder" style="position:absolute;border:2px solid red;left:0px;top:0px;width:70px;height:70px;z-index:1002;">G</div>
<div id="id4" class="classHolder" style="position:absolute;border:2px solid red;left:210px;top:0px;width:25px;height:70px;z-index:1001;">L</div>
asd asdf asdfg
</div>
</body>
</html>

1voto

marcos Punkte 41

LÖSUNG: hinzugefügt

"background-color:#FFFFFF;"

zum Element style. und die Funktion wacky verwendet:

function setOpacity(obj,value){
  obj.style.opacity=value/10;
  obj.style.filter='alpha(opacity='+value*10+')';
} 

und schließlich bei der Bindung des evento an das Element:

   $("div.classHolder").each(function(){
      $(this).bind("click",function(e){ alert($(this).html()); }); 
      setOpacity(this,0);
   });

1voto

Hezad Punkte 146

Ich hatte gerade das gleiche Problem. Gelöst mit css.

Diesen "Hack" habe ich in meine Elementstildefinition eingefügt:

background-color:#ffffff;
filter: alpha(opacity=1);
opacity: 0.01;

Getestet in Firefox 4, IE 7 und dem neuesten Safari

0voto

Jason Punkte 49785

Ich weiß nicht, ob dies notwendigerweise Ihr Problem ist oder nicht, aber haben Sie versucht, Ihr "type"-Attribut auf "text/javascript" anstelle von "application/javascript" zu ändern? Auch dies könnte 0 Wirkung haben. Aber dann wieder, IE ist skurril.

0voto

David Punkte 2775

Zwei Themen: 1) Wie schon jemand anderes festgestellt hat, ignoriert der IE das Skript, wenn der Typ nicht auf "text/javascript" gesetzt ist. 2) Wenn das Element absolut positioniert ist, werden die Klick-Ereignisse nur ausgelöst, wenn sich die Maus über dem "Inhalt" im abs div befindet. In diesem Fall ist das der Textinhalt wie der Buchstabe G. Sie können eine Hintergrundfarbe festlegen, um Klicks überall im div zuzulassen. Alternativ können Sie eine sehr große Schriftgröße festlegen und einfach ein   in das Element mit overflow:hidden einfügen, damit es transparent ist, aber dennoch Klicks auf das gesamte Element verarbeitet.

Hier ist eine modifizierte Version Ihres Beispiels:

<html> 
<head> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
   $("#id3").click(function(){ 
        alert( $(this).html() ); 
        }); 

   //$("#id3").trigger("click"); 
}); 
</script> 
</head> 
<body> 
<div id="id1" style="position:relative;"> 
<img id="id2" src="http://www.google.co.uk/intl/en_com/images/srpr/logo1w.png" style=";z-index:-1;"/> 
<div id="id3" class="classHolder" style="position:absolute;font-size:9000px;overflow:hidden;background-color:transparent;border:2px solid red;left:0px;top:0px;width:70px;height:70px;z-index:1002;">&nbsp;</div> 
<div id="id4" class="classHolder" style="position:absolute;border:2px solid red;left:210px;top:0px;width:25px;height:70px;z-index:1001;">&nbsp;</div> 
asd asdf asdfg 
</div> 
</body> 
</html>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X