Javascript / jQuery Popup循环和添加

时间:2013-12-20 06:17:57

标签: javascript jquery html

首先,我对编程很新,所以请保持温和。 Stack Overflow对我来说是一个很好的资源,所以谢谢你们所有的贡献者。

这个我不能破解,这是一个很难的搜索项目,你可以用神秘的标题告诉你......

无论如何,我有一个jQuery popup函数,它可以从events.register控件中调用。基本上每当用户点击地图时,它就会向Web服务发送请求,获取数据,填充用户可以与之交互的表单并将数据保存回SQL。

效果很好我很满意它的进步。

其中一个功能是更改表中的值,我希望用户得到一个提示,以确保他们不会意外地保存他们不想要的东西。它在刷新后第一次完美地工作,但之后每次都添加一次确认,然后再次,直到最后在第五次之后有5次确认一个接一个地出现。一旦用户点击它们,代码运行正常,我得到预期的结果。

我只打电话给确认一次(我想?)但是,是的,我迷路了,这是我的功能,对不起,如果难以阅读或格式不佳:

function popup() {
        j = jQuery.noConflict();
        j(document).ready(function() {
            //open popup
            j("#detailsform").height(250);
            j("#detailsform").fadeIn(1000);
            positionPopup();
            document.getElementById("condition").value = getCondition;
            j("#selCatHead").hide();
            j("#cats").hide();
            //dispose tree
            j("#dispose").click(function() {
                if (confirm("Are you sure?")) {
                    disposetree();
                }
                else { return false; };
            });
            //save defect
            j("#savedef").click(function() {
                saveDef();
            });
            //fade in defects
            j("#adddefect").click(function() {
                j("#detailsform").height(400);
                j("#selCatHead").fadeIn(1000);
                j("#cats").fadeIn(1000);
            });
            //fade out popup
            j("#close").click(function() {
                j("#detailsform").fadeOut(500);
            });
        });          // close document ready function

        //position the popup at the center of the page
        function positionPopup() {
            if (!j("#detailsform").is(':visible')) {
                return;
            }
            j("#detailsform").css({
                left: (j(window).width() - j('#detailsform').width()) / 2,
                top: (j(window).width() - j('#detailsform').width()) / 7,
                position: 'absolute'
            });
        } // close positionPopup function

        //maintain the popup at center of the page when browser resized
        j(window).bind('resize', positionPopup);

    }; // close popup function

编辑:感谢@jfriend00,每次都从弹出式调用中删除了函数并关闭了处理程序,例如:

function popup() {
        j = jQuery.noConflict();
        j(document).ready(function() {
            //open popup
            j("#detailsform").height(250);
            j("#detailsform").fadeIn(1000);
            //dispose
            j("#dispose").off();
            j("#dispose").click(function() {
                disposeClickHandle();
            });
            //save
            j("#savedef").off();
            j("#savedef").click(function() {
                saveDef();
            });
        }); 

然后:

function disposeClickHandle() {
        if (confirm("Are you sure?")) {
            disposetree();
        }
        else { return false; };
    };  

1 个答案:

答案 0 :(得分:1)

您应该只安装点击处理程序ONCE。如果多次安装,会多次触发。

因此,每次调用popup()函数时,它都会安装另一个单击处理程序。然后,当您单击时,单击处理程序将多次触发。您应该将您的单击处理程序安装移动到您多次调用的函数之外并将其放在初始化函数中,该函数仅在开始时调用一次,或者您可以在操作后删除单击处理程序,因此当您再次安装它时,它将只安装一次。