2017-07-27 92 views
1

所以我有这种形式。我想检查用户是否验证了验证码,但有问题。这是检查函数的表单。表单仍然提交,尝试使用e.preventDefault();

<form data-id="embedded_signup:form" id="myForm" class="ctct-custom-form Form" name="embedded_signup" method="POST" action="https://visitor2.constantcontact.com/api/signup" onsubmit="check_if_capcha_is_filled()"> 

以下是确定doSubmit(验证码)是否已验证的功能。

function check_if_capcha_is_filled(e){ 
    if(doSubmit) return true; 
    e.preventDefault(); 
    alert('Fill in the capcha!'); 
    return false; 
}; 

但我得到一个错误

Uncaught TypeError: Cannot read property 'preventDefault' of undefined 
at check_if_capcha_is_filled 

任何指针,我缺少的是什么?谢谢。

+0

'的onsubmit = “返回check_if_capcha_is_filled(事件)”'更好的是,使用'addEventListener'并删除过时的'上*'事件属性 –

+0

地方'e.preventDefault();'在第一行内的函数 –

+0

删除所有内联js和css - 这是不好的做法,导致难以主要的代码和意外的行为也,你正在使用preventDefault,将张贴一个答案 – ThisGuyHasTwoThumbs

回答

1

你e.preventDefault正在使用不当。它不会做任何事情,因为你传递一个事件给一个函数,你想把它连接到这样的事件处理程序:

$('form').on('submit', function(e) 
{ 
    e.preventDefault(); 
    //rest of code 
}) 

这将停止提交动作。

裁判:http://api.jquery.com/event.preventDefault/

0

这里有两个问题。首先你需要return这个功能来自onsubmit事件attriubute。其次,你没有把事件传递给函数 - 但是这只会在全局事件可用的地方工作,也就是说,不是Firefox。

要解决此问题并改善您的逻辑,您可以改为使用addEventListener()不显眼地将事件处理程序添加到元素,并删除过时的on*事件属性。试试这个:

var doSubmit = false; 
 

 
document.getElementById('myForm').addEventListener('submit', function(e) { 
 
    if (doSubmit) 
 
    return; 
 
    
 
    e.preventDefault(); 
 
    alert('Fill in the capcha!'); 
 
});
<form data-id="embedded_signup:form" id="myForm" class="ctct-custom-form Form" name="embedded_signup" method="POST" action="https://visitor2.constantcontact.com/api/signup"> 
 
    <button type="submit">Submit</button> 
 
    <form>

0

使用on事件侦听器

将其更改为

<form data-id="embedded_signup:form" id="myForm" class="ctct-custom-form Form" name="embedded_signup" method="POST" action="https://visitor2.constantcontact.com/api/signup" > 

$('form').on('submit', function(e){ 
    // validation code here 
    if(!valid) { 
     e.preventDefault(); 
    } 
    }); 
1

这是你想要的吗?

<form data-id="embedded_signup:form" id="myForm" class="ctct-custom-form Form" name="embedded_signup" method="POST" action="https://visitor2.constantcontact.com/api/signup"> 

然后在您的js文件:

function check_if_capcha_is_filled(){ 
    if (doSubmit){ 
     return true; 
    }else{ 
     return false; 
    } 
}; 

$('#myForm').on('submit', function(e){ 
    if (!check_if_capcha_is_filled){ 
     e.preventDefault(); 
    } 
}); 
0

使用jQuery,如果你想确认提交。

<button name="delete" class="submitbutton">Delete</button> 

$('.submitbutton').click(function() { 
    var buttonpressed; 
    buttonpressed = $(this).attr('name'); 
    var r = confirm("Please confirm to " + buttonpressed); 

    if (r == true) { 
     $('#yourformid').submit(); 
    } else { 
     return (false); 
    } 
}); 
相关问题