1

我收到错误消息太多递归。为什么?

以下代码应该在单击图像时展开/折叠表格行。如果图像不存在,则单击最后一行将展开/折叠时会有一个 div

$(document).ready(function() {
    $(".ui-dialog-titlebar").hide(); 
    //$(".lvlcollapse .level4").hide();
    $("tr.lvlcollapse").click(function() {
        //alert($(this).find("img").attr("src"));
        if ($(this).find("img").attr("src") != undefined) {
            var tnow = $.now();
            var allClass = $(this).attr('class');
            var level = getLevel($(this));
            var state = getClass($(this), '^clicked\\d+$');
            if (state == undefined) {
                state = "closing";
                $(this).addClass("clicked" + tnow);
            }
            else {
                $(this).removeClass(state);
                tnow = state.substr(6);
            }
            switchImage($(this));
            $(this).nextAll(".lvlcollapse").each(function() {
                var sublvl = getLevel($(this));
                var subtnow = 0;
                var substate = getClass($(this), '^closed\\d+$');
                if (substate != undefined) subtnow = substate.substr(5);
                if (sublvl > level) {
                    if (state == "closing" && subtnow == 0) {
                        $(this).addClass("closed" + tnow);
                        $(this).toggle();
                    }
                    else if (subtnow == tnow) {
                        $(this).removeClass(substate);
                        $(this).toggle();
                    }
                }
                else {
                    return false;
                }
            });

        } else {
            //alert('No Image ');
            $(".button").click(function(event) {
                //var $this2 = $(this);
                var allLevel4 = $(this).next(".lvlcollapse.level4");
                $($(this)).toggle('fast', function() {
                    if (allLevel4.is(":visible")) {
                        $(this).html("Show Attempts");
                        alert('hello2');
                        return false;
                    } else {
                        $(this).html("Hide Attempts");
                        alert('hello3');
                        return false;
                    }

                }) event.preventDefault();
            }).trigger("click");
        }
    });
    $(".lvlcollapse.level2").filter(function() {
        return $(this).next(".lvlcollapse.level3").is(":visible");
    }).trigger("click");
    //$(".button").filter(function() { return $(this).next(".lvlcollapse.level4").is(":visible"); }).hide();
});​
4

2 回答 2

0

你被注释掉的那些警报会发生什么?如果您取消注释它们,您是否看到它们一遍又一遍地重复?else 中的 $('.button').click() 看起来很糟糕。您只需要注册一次,但您在点击侦听器中有它,因此每次用户单击链接时都会注册它。将其拉出并在文件准备好或建表时注册。不是响应用户点击某些东西。

于 2012-12-05T20:03:28.517 回答
0

一件看起来很有趣的事情是,您正在为单击处理程序中的按钮添加一个单击处理程序tr.lvlcollapse。每次单击它都会创建一个新的处理程序,并且在您调用时会触发所有以前的处理程序trigger.click()

由于点击事件冒泡,它也会触发所有父母的点击处理程序。如果按钮在里面tr.lvlcollapse,那可能是你的问题。

你需要做两件事:

  • 不要从处理程序中设置处理程序,除非您真的知道自己在做什么并且您有计划解除处理程序的绑定,或者至少在绑定之前删除现有的绑定。请注意,这不太常见,您通常不会从处理程序中添加处理程序。

  • event.stopPropagation()如果您不希望祖先节点处理单击,请调用

于 2012-12-05T20:03:42.910 回答