jquery切换在子元素上触发两次?

jquery切换在子元素上触发两次?,jquery,show-hide,Jquery,Show Hide,我的页面上有一个带有onclick=“toggledropdown()”的div(id=“menu”)。这个div有子img元素和文本。当单击除图像以外的任何内容时,切换代码都可以正常工作。但是,当单击图像时,div会向下滑动,然后再次返回 切换代码: function toggledropdown() { if ($("#dropdown").is(":hidden")) { $("#dropdown").slideDown(400);

我的页面上有一个带有onclick=“toggledropdown()”的div(id=“menu”)。这个div有子img元素和文本。当单击除图像以外的任何内容时,切换代码都可以正常工作。但是,当单击图像时,div会向下滑动,然后再次返回

切换代码:

function toggledropdown()
{
    if ($("#dropdown").is(":hidden"))
    {   
        $("#dropdown").slideDown(400);      
    }
    else
    {
        $("#dropdown").slideUp(50);     
    }
}
body.click可隐藏下拉列表(如果单击了页面):

$(document.body).click(function(event)
{
    var targetID = $(event.target).attr("id");
    if (targetID !== "dropdown" && targetID !== "menu")
    {
        if (!$("#dropdown").is(":hidden"))
            toggledropdown();
    }
});
下拉。单击以取消正文。单击

$("#dropdown").click(function(e)
{
    e.stopPropagation();
});
html div(省略了一些与问题无关的内容):


正文
因此,重申一下,单击菜单div(减去图像)可以正确地滑出菜单,再次单击它(包括图像)或页面上的任何其他位置都可以正常工作,但是在隐藏下拉列表时单击图像可以将其切换两次(您可以看到它滑出和滑回)

子imgs是否触发父项的onclick两次?一次给孩子,一次给父母?为什么?如何使其按预期工作:单击div上的任意位置会触发onclick一次?

您需要使用来阻止事件冒泡

描述:防止事件在DOM树中冒泡,防止任何父处理程序收到事件通知


这将阻止父处理程序触发其事件。stopPropagation()是您需要的,代码中的
$(“#下拉列表”)
元素是什么?另外,为什么要使用内联JavaScript?是否在幻灯片动画完成之前单击图像?如果是,请尝试使用
$(“#下拉”).stop(true,true)。slideDown(400)
$(“#下拉”).stop(true,true)。slideDown(400)?另外,请删除内联脚本并将其移动到处理程序代码。@wirey$(“#dropdownarrow”)。单击(函数(e){e.stopPropagation();});导致它根本不调用切换。@Vega否,如果单击一次,#下拉列表向下滑动,然后再次向上滑动。我去掉了在线javascript。没有解决任何问题,但谢谢你帮我处理关于标准实践的问题。是的。具体来说,在toggledropdown()调用上方的#菜单的单击绑定中。类似于:$(“#菜单”).click(函数(e){e.stopPropagation();toggledropdown();});
<div class="menu" id="menu" onclick="toggledropdown();">
    <img id="dropdownthumbnail" (blahsrc/styleblah) />
    Text
    <img id="dropdownarrow" (blahsrc/styleblah) />
</div>