如何仅为当前按钮实现onclick事件?

时间:2013-07-30 17:16:27

标签: javascript onclick

我想在按钮点击时显示/隐藏带有子项的div,但不是在不同父块中显示/隐藏其他相同的div。 对不起我的错误解释和js知识,也许代码可以说得更好:

for (a = 0; a < document.querySelectorAll("#hidereplies").length; a++) {
    var btn = document.querySelectorAll("#hidereplies")[a];
    btn.onclick = function () {
        for (var y = 0; y < document.querySelectorAll(".reply_comments").length; y++) {
            var reply = document.querySelectorAll(".reply_comments")[y];
            reply.style.display = (reply.style.display != 'none' ? 'none' : 'block');
        }
    };
}

Demo on jsfiddle

1 个答案:

答案 0 :(得分:0)

你做错了一些事情。

首先,在您的HTML中,不要多次使用ID。你给按钮的ID相同。

接下来,将querySelector结果分配给数组并迭代数组。

第三,您需要确定查询范围。您正在检查document上的元素,因此所有内容都会被拉入而不是作为当前div的范围。

//note that I've changed from an ID to a class for your buttons
var buttons = document.querySelectorAll(".hidereplies");

for (a = 0; a < buttons.length; a++) {
    var btn = buttons[a];
    btn.onclick = function (event) {
        var btn = event.currentTarget; //get the current button clicked
        var comments = btn.parentNode.querySelectorAll(".reply_comments"); //scope the search
        for (var y = 0; y < comments.length; y++) {
            var reply = comments[y];
            reply.style.display = (reply.style.display != 'none' ? 'none' : 'block');
        }
    };
}

HTML

<div class="comments_list">
    <div class="comment_item">
        <div class="comment_body">test1 - comments</div>
        <input type="button" class="hidereplies" value="show replies" />
        <div class="reply_comments">
            <div class="comment_body">want to hide only current ".reply_comments"</div>
        </div>
    </div>
    <div class="comment_item">
        <div class="comment_body">test2 - comments</div>
        <input type="button" class="hidereplies" value="show replies" />
        <div class="reply_comments">
            <div class="comment_body">but not all</div>
        </div>
    </div>
    <div class="comment_item">
        <div class="comment_body">test3 - no comments</div>
        <div class="reply_comments"></div>
    </div>
</div>

您的更新小提琴 - http://jsfiddle.net/yhtKa/4/