如何在类上使用onclick但仅限于某些元素

时间:2014-09-04 08:01:20

标签: javascript jquery html

这就是我的HTML代码的样子,在实际代码中有几个这样的块。当你点击这个DIV中的某个地方时,toogleDescription(this)会被调用。我的问题是,当你点击其中一个ANCHORS(a)时我不希望发生什么事情,那么是否有可能在Javascript中定义某些不会发生任何事情的DIV?

<div class="dokumente_table">
    <div class="dokumente_group onclick="toggleDescription(this)">
        <img class="dokumente_triangle" src="/_files/img/triangle_13.png">
        <div class="button_group">
            <a class="button">Content...</a>
            <a class="button">Content...</a>
        </div>
        <div class="dokumente_download_frame">
            <a class="dokumente_download">Content...></a>
        </div>
        <div class="dokumente_row">
            Content...
        </div>
        <div class="dokumente_row">
            Content...
        <div class="dokumente_extra_row">
            Content...
        </div>
    </div>
</div>

所以这是被调用的Javascript。

function toggleDescription(that) {
    if($(that).find('.dokumente_extra_row').is(':visible')) {    
        $(that).find('.dokumente_extra_row').slideUp(500);
        $(that).find('.dokumente_triangle').rotate({
            duration: 1000,
            angle: 90,
            animateTo: 0
        });
    }
    else {
        $(that).find('.dokumente_extra_row').slideDown(500);
        $(that).find('.dokumente_triangle').rotate({
            duration: 1000,
            angle: 0,
            animateTo: 90
        });
    }
}

2 个答案:

答案 0 :(得分:2)

如果您不想在点击特定锚点时执行toggleDescription,则可以使用特定锚点中的stopPropagation()事件对象方法阻止点击的传播。点击事件。

例如,如果您想跳过以下锚点的执行

<a class="dokumente_download">Content...></a>

你可以做到

$(".dokumente_download").click(function(e){
 e.stopPropagation();
});

答案 1 :(得分:0)

您需要更改此行,如下所述:

 <div class="dokumente_group onclick="toggleDescription(this,event)">

然后你的功能必须是:

function toggleDescription(that,event) {
    if(!$('a').is(event.target)){
        if($(that).find('.dokumente_extra_row').is(':visible')) {    
            $(that).find('.dokumente_extra_row').slideUp(500);
            $(that).find('.dokumente_triangle').rotate({
                duration: 1000,
                angle: 90,
                animateTo: 0
            });
        }
        else {
            $(that).find('.dokumente_extra_row').slideDown(500);
            $(that).find('.dokumente_triangle').rotate({
                duration: 1000,
                angle: 0,
                animateTo: 90
            });
        }
    }
}