是否存在与onmouseleave相同的冒泡但是对于oncontextmenu的事件?

时间:2015-03-25 02:20:06

标签: javascript php html css ajax

(编辑: 是否存在与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>

我希望你明白我在问什么。如果不在下面发表评论。谢谢。

0 个答案:

没有答案