我在这里读了一些答案。从来没有遇到过这个问题,似乎无法解决这个问题。为什么.load()
函数会因一键点击而被触发两次?
//proccess form
$('#special-offers-submit').click(function(e){
e.preventDefault();
console.log('Click');
send = true;
$('#other-industry').val($('#industry').val());
$('#popup-form input.input_field').each(function(){
if($(this).val().length < 2)
{
$(this).css('border-color','#cc0000');
$(this).siblings('label').css('color', '#cc0000');
$('#errorMessage').show();
send = false;
}
});
if(send)
{
data = $('#popup-form').serialize();
console.log(data);
$('#special-offers').load('http://www.avwebdesigns.com/ajax/popup-processor.php?'+data);
}
});
有一个ID为special-offers-submit
的按钮,点击后我会检查所有字段是否已填写并尝试通过.load()
功能提交表单 - 该功能也会发送电子邮件。我收到了双重电子邮件,“点击”也被记录了两次。如果它有所不同,我加载的容器是一个fancybox。
感谢您的帮助。
布赖恩
答案 0 :(得分:1)
我需要查看更多代码,但是您可以多次附加到Click事件吗?
试试这个:
$('#special-offers-submit').off('click').on('click', function(e){
答案 1 :(得分:1)
将$('#special-offers-submit').click(
更改为:
$('#special-offers-submit').closest( 'form' ).submit(
让提交按钮完成工作 - 提交表单。由于您使用点击事件e.preventDefault()
并不会阻止默认表单提交....甚至不确定它是否真的有效。因此,按钮单击会在不被阻止的情况下通过,并且表单会提交,因为在按钮单击事件中不会阻止它。
但是,当您在表单上使用提交事件时,e.preventDefault()
会阻止默认表单提交。
或者,您可以使用(我的最佳选择):
$('#popup-form').submit(
答案 2 :(得分:0)
经过大量搜索,我发现如果您在代码正文中多次$(document).ready
或$(function{})
,就会发生这种情况。我的解决方案是
$('#special-offers-submit').unbind('click').bind('click',function(e){
//rest of code the same in here
}
如果有人好奇,here是帮助我的链接,其中包括对其他有类似头痛的人的引用。
要明确我应该添加我发现这是问题,因为页面上的其他内容没有使用相同的ID,或试图操纵此元素。隔离时代码也很好,并且可以在其他网站上找到。