Esto es lo mejor que puedo llegar a. Probablemente puedas ser bastante elaborado, pero (que yo sepa) el mayor índice z siempre capturará el evento. PUEDES, sin embargo, evitarlo, pero probablemente sea mejor refacturar a otra función con un valor de compensación suministrado (o no) para que puedas tener en cuenta '#region' cuando se están produciendo los eventos. También puede utilizar e.target para comprobar lo que le está enviando el evento (ver http://api.jquery.com/category/events/ para más propiedades)
$('#region2').mousemove(function(e){
var regionPos = $('#region').position();
var region2Pos = $('#region').position();
var offset = {
left: region2Pos.left - regionPos.left,
top: region2Pos.top - regionPos.top
};
var pageCoords = "(" + e.pageX + ", " + e.pageY + ")";
var clientCoords = "(" + (e.clientX + offset.left) + ", " + (e.clientY + offset.top) + ")";
$("span:first").text("(e.pageX, e.pageY) - " + pageCoords);
$("span:last").text("(e.clientX, e.clientY) - " + clientCoords);
});
edición segunda solución:
<!DOCTYPE html>
<html>
<head>
<style>
#region { width:220px; height:170px; margin;10px; margin-right:50px;
background:yellow; border:2px groove; float:right; }
#region2 {
background-color: white;
float:right;
position: relative;
right: -150px; top: 50px;
width: 100px; height: 100px;
border: 1px solid
}
#region3 {
width:30px;
height: 30px;
background-color: brown;
}
p { margin:0; margin-left:10px; color:red; width:220px;
height:120px; padding-top:70px;
float:left; font-size:14px; }
span { display:block; }
</style>
<script src="http://code.jquery.com/jquery-1.4.4.js"></script>
<script type="Text/javascript">
jQuery.extend({
MousemoveElement: function(needle,onActivation){
var elList = needle;
$('*').mousemove(function(e){
$('#outside').html('<b>Outside:<b/><br />target: '+e.target.tagName+' ['+e.target.id+']<br />client: '+e.clientX+','+e.clientY+'<br />page: '+e.pageX+','+e.pageY);
$('#inside').html('');
if (onActivation==null)
return;// only search if we need to
$(needle).each(function(){
$('#meta').html('outside');
var pt = { x: e.pageX, y: e.pageY };
var ext = {
left: $(this).offset().left,
right: ($(this).offset().left + $(this).innerWidth()),
top: $(this).offset().top,
bottom: ($(this).offset().top + $(this).innerHeight())
};
$('#meta').html('<b>PT:</b> '+pt.x+','+pt.y+'<br /><b>EXT:</b> ('+ext.left+','+ext.top+';'+ext.right+','+ext.bottom+')');
if ((pt.x >= ext.left) && (pt.x <= ext.right) && (pt.y >= ext.top) && (pt.y <= ext.bottom)){
$('#meta').html('GOOD');
onActivation(e,$(this));
}
});
});
}
});
$(document).ready(function(){
$.MousemoveElement('#region',function(e,element){
$('#inside').html('<b>Inside:<b/><br />target: '+element.attr('id')+'<br />client: '+e.clientX+','+e.clientY+'<br />page: '+e.pageX+','+e.pageY);
$('#outside').html('');
});
});
</script>
</head>
<body>
<p>
Try scrolling too.
<span id="meta">Move the mouse over the div.</span>
<span id="outside"> </span>
<span id="inside"> </span>
</p>
<div id="region"><div id="region3"></div></div>
<div id="region2"></div>
</body>
</html>
He leído esto varias veces y todavía no entiendo muy bien lo que estás preguntando. En lugar de usar términos vagos como "elemento inicial", ¿puede decir, utilizando el ejemplo que ha proporcionado, cuál es el comportamiento que le gustaría que fuera? ¿Es su intención evitar que # region2 tenga eventos de mouse, o es una derivación que se le ocurrió? ** EDITAR ** Creo que lo entiendo ahora, quieres que # region2 deje de interferir con el mouseover de # region, ¿correcto? (Lo siento, privación de café) –
Sí, Brad, tienes razón, gracias por tu atención! – tester
duplicado posible de [HTML/CSS: Hacer un div "invisible" para clics?] (Https://stackoverflow.com/questions/3538489/html-css-make-a-div-invisible-to-clicks) – vaxquis