(编辑: 是否存在与onmouseleave相同的冒泡事件,但对于oncontextmenu? )
这个程序很复杂,因为它在iframes
之间交换功能/代码。然而,这不是我的问题。我的问题是我有大量的div通过xml,php和ajax加载到文档中。每个div都有一个oncontextmenu
事件设置。当php通过ajax回显内容时,每个div都有一个自动递增id设置。如您所见,每个div内部都有许多其他元素。
我的问题是当我点击div中的图像或其他元素时脚本没有给出id。
总而言之当我点击div或其中的任何元素时,我想得到id。如果可能,您能解释事件捕获/泡沫解决方案吗?这是代码:
$xml = simplexml_load_file('xml/birds.xml');
foreach($xml->bird as $bird)
{
$images = explode(",",$bird->image);
echo '<div class=\'birdContainers\' id="'.$bird->id.'">';
echo '<span class="birdName">'.$bird->name.'</span>';
echo '<img class="thumbImage" src="images/'.$images[0].'">';
echo $bird->fourLetterCode;
echo '<div class="birdButtons"><input type="button" class="edit" onclick="alert(\'open popup for editing see line 10 inside php/getBirds.php\');" value="Edit"><input type="button" class="delete" value="Delete" onclick="alert(\'delete see line 10 inside php/getBirds.php\');"></div>';
echo "</div>";
}
这是将oncontextmenu事件添加到所有div的javascript:
$('#birds').load('php/getBirds.php', function(){
var birdContainers = document.getElementsByClassName('birdContainers');
for(var i = 0; i != birdContainers.length; i++)
{
if (birdContainers[i].addEventListener) {
birdContainers[i].addEventListener('contextmenu', function(e) {var mouseX = e.clientX || e.pageX; var mouseY = e.clientY || e.pageY; window.parent.document.getElementById('menu').style.left = mouseX+20+'px'; alert(e.target.id); window.parent.document.getElementById('menu').style.top = mouseY+100+'px'; window.parent.document.getElementById('menu').style.display = 'block'; this.style.borderColor = '#3B87FF'; e.preventDefault();}, true);
birdContainers[i].addEventListener("dblclick", function(event){openBird(this.id);}, true);
birdContainers[i].addEventListener("click", function(event){this.style.borderColor = '#3B87FF';}, true);
} else if (birdContainers[i].attachEvent) {
birdContainers[i].attachEvent("dblclick", function(event){openBird(this.id);}, true);
birdContainers[i].attachEvent("click", function(event){this.style.borderColor = '#3B87FF';}, true);
birdContainers[i].attachEvent('contextmenu', function(e) {var mouseX = e.clientX || e.pageX; var mouseY = e.clientY || e.pageY; window.parent.document.getElementById('menu').style.left = mouseX+20+'px'; window.parent.document.getElementById('menu').style.top = mouseY+100+'px'; window.parent.document.getElementById('menu').style.display = 'block'; this.style.borderColor = '#3B87FF'; e.preventDefault();}, false);
}
}
});
以下是我的自定义上下文菜单中的按钮运行时运行的函数:
<div id="menu">
<input type="button" value="Open" onclick="document.getElementById('browse').contentWindow.openBird(i need to put the id variable here of the element clicked on when the oncontextmenu event was/is fired.);">
</div>
我希望你明白我在问什么。如果不在下面发表评论。谢谢。