是什么导致.load()在这里开火两次?

时间:2014-05-22 00:36:43

标签: javascript jquery

我在这里读了一些答案。从来没有遇到过这个问题,似乎无法解决这个问题。为什么.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。

感谢您的帮助。

布赖恩

3 个答案:

答案 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,或试图操纵此元素。隔离时代码也很好,并且可以在其他网站上找到。