Javascript/jQuery弹出循环和添加
首先,我对编程很陌生,所以请温柔一点。堆栈溢出对我来说是一个极好的资源,所以感谢所有的贡献者 这一个我无法破解,而且它是一个很难搜索的项目,正如你可能从神秘的标题中可以看出的 无论如何,我有一个jQuery弹出函数,它可以从events.register控件调用。本质上,每当用户单击地图时,它都会向web服务发送请求,获取数据,填充表单,然后用户可以与表单交互并将数据保存回SQL 它运行得非常好,我对它的进展感到高兴 其中一个功能是更改表中的值,我希望用户得到一个提示,以确保他们不会意外地保存他们不打算保存的内容。它在刷新后第一次工作得很好,但是每次之后它都会添加一个确认,然后再次添加,直到最后在第五次之后,有5个确认一个接一个地出现。一旦用户点击它们,代码就可以正常运行,我得到了预期的结果 我只打了一次确认电话(我想是吧?),但是,是的,我迷路了,这是我的函数,如果很难阅读或格式不好,很抱歉:Javascript/jQuery弹出循环和添加,javascript,jquery,html,Javascript,Jquery,Html,首先,我对编程很陌生,所以请温柔一点。堆栈溢出对我来说是一个极好的资源,所以感谢所有的贡献者 这一个我无法破解,而且它是一个很难搜索的项目,正如你可能从神秘的标题中可以看出的 无论如何,我有一个jQuery弹出函数,它可以从events.register控件调用。本质上,每当用户单击地图时,它都会向web服务发送请求,获取数据,填充表单,然后用户可以与表单交互并将数据保存回SQL 它运行得非常好,我对它的进展感到高兴 其中一个功能是更改表中的值,我希望用户得到一个提示,以确保他们不会意外地保存他
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; };
};
您应该只安装一次单击处理程序。如果您多次安装,它将触发多次
因此,每次调用
popup()
函数时,它都会安装另一个单击处理程序。然后,当您单击时,单击处理程序将触发多次。您应该将您的单击处理程序安装移到您多次调用的函数之外,并将其放入一个初始化函数中,该函数在开始时只调用一次,或者您可以在操作后删除单击处理程序,以便再次安装时,只安装一次。谢谢您的回复@jfriend00!谢谢你的时间。你的意思是在弹出窗口中每个元素只点击一次(function()),还是整个函数只点击一次?如果是这样,当用户点击一个元素时,触发其他函数的方法是什么?再次感谢!如果我得到了它,我将对它进行破解并返回。@MorganEllingham-only call。点击(fn)
每个元素调用一次。如果您多次调用它,那么它会在单击内容时多次调用您的回调函数。再次感谢@jfriend00。我已经完成了您的两项建议,将函数移到弹出调用之外,并在每次安装之前关闭了单击函数。我希望这是ri唉!现在很好用。