我正在尝试在提交时验证电子邮件。现在,我有它工作,以便它验证我是否从电子邮件选项卡提交按钮,以及我是否直接单击提交按钮。但是,它不验证我是否在电子邮件字段中按Enter键。此外,一旦单击提交验证,我必须再次单击该按钮才能实际提交。
原因是因为我在提交输入上以type =“button”而不是type =“submit”开头。这是因为在我开始使用type =“submit”之前,无论电子邮件是否有效,它都会提交。
现在,我从type =“button”开始,验证电子邮件,然后在有效的电子邮件中将其更改为type =“submit”。但是,就像我提到的那样,它仍然不是最友好的用户(即使它确实有效)。我想添加上述用户友好的功能。这是我的代码(注意:我正在使用Mailgun jQuery电子邮件验证器进行验证部分):
<form accept-charset="UTF-8" id="icpsignup" name="icpsignup" action="process.php" method="post">
<p>
<input type="text" onfocus="this.value=''" onblur="this.value=!this.value?'Enter name...':this.value;" class="txtbox_index" placeholder="Enter name..." value="Enter name..." name="fields_fname" id="fields_fname">
</p>
<p>
<input type="text" class="txtbox_index" onfocus="this.value=''" onblur="this.value=!this.value?'Enter email...':this.value;" name="fields_email" id="fields_email" Value="Enter email..." placeholder="Enter email...">
<input type="text" style="border: none;color: #fff;cursor: none; background-color:transparent; height:0px;" size="1" value="<?=$country_field;?>" name="fields_country" id="fields_country">
</p>
<div id="status"></div>
<p class="forfree">
<input type="button" value="Signup For Free!" id="validate_submit" class="signupbtn_new" name="submit">
</p>
<input type="hidden" value="<?php echo $paramstring ;?>" name="fields_trk">
</form>
<script src="js/vendor/jquery.js"></script>
<script src="js/mailgun_validator.js"></script>
<script>
// document ready
$(function() {
// capture all enter and do nothing
/* $('#fields_email').keypress(function(e) {
if(e.which == 13) {
$('#fields_email').trigger('focusout');
return false;
}
});
// capture clicks on validate and do nothing
/* $("#validate_submit").click(function() {
return false;
});*/
// attach jquery plugin to validate address
$('#fields_email').mailgun_validator({
api_key: 'pubkey-8s-e-ovj0nbi32xw5eeyibrmv-lkq2e2', // replace this with your Mailgun public API key
in_progress: validation_in_progress,
success: validation_success,
error: validation_error,
});
});
// while the lookup is performing
function validation_in_progress() {
$('#status').html("<img src='images/loading.gif' height='16'/>");
}
// if email successfull validated
function validation_success(data) {
$('#status').html(get_suggestion_str(data['is_valid'], data['did_you_mean']));
}
// if email is invalid
function validation_error(error_message) {
$('#status').html(error_message);
}
// suggest a valid email
submitHandler: function(form) {
function get_suggestion_str(is_valid, alternate) {
if (alternate) {
form.preventDefault();
return '<span class="warning">Did you mean <em>' + alternate + '</em>?</span>';
} else if (is_valid) {
form.submit();
//return '<span class="success">Address is valid.</span>';
} else {
form.preventDefault();
return '<span class="error">Address is invalid.</span>';
}
}
}
//尝试使用Submithandler的另一个版本。我不确定我是否应该使用验证。:
$(function() {
$("#icpsignup").validate({
submitHandler: function('icpsignup') {
function get_suggestion_str(is_valid, alternate) {
if (alternate) {
icpsignup.preventDefault();
return '<span class="warning">Did you mean <em>' + alternate + '</em>?</span>';
} else if (is_valid) {
icpsignup.submit();
//return '<span class="success">Address is valid.</span>';
} else {
icpsignup.preventDefault();
return '<span class="error">Address is invalid.</span>';
}
}}
})
})
</script>
答案 0 :(得分:0)
注意:这假设您将使用 jQuery 1.4.3或更高版本
当用户尝试提交 FORM 时, SUBMIT 事件会发送到元素:< / p>
<form>
元素。 可以通过单击显式提交表单:
<input type="submit">
,<input type="image">
或<button type="submit">
,。
<小时/> 注意: *根据浏览器的不同,输入只会在以下情况下提交表单:
仅当存在提交按钮时。
<小时/> 因此 ,您的代码不应该依赖此密钥的特定行为,除非通过观察 keypress事件来强制解决问题Enter
密钥,即字符代码13.
.keypress()
处理程序 .submit()
page HERE获取更多详细信息。在您的方案中(以及大多数情况下),我会使用<input type="submit">
按钮并捕获 SUBMIT 事件。
在提交处理程序 回调功能:
$( "form#icpsignup" ).submit(function( evt ){
//...
$('#fields_email').mailgun_validator({
api_key: 'pubkey-8s-e-ovj0nbi32xw5eeyibrmv-lkq2e2', // replace this with your Mailgun public API key
in_progress: validation_in_progress,
success: validation_success,
error: validation_error,
});
//...
}
您需要验证<form>
(即在一个或多个input
字段中使用任何代码,声明等)。然后......
return true
声明evt.preventDefault();
,evt
是传递给提交处理程序的参数。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>submit demo</title> <style> p { margin: 0; color: blue; } div,p { margin-left: 10px; } span { color: red; } </style> <script src="//code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <p>Type 'correct' to validate.</p> <form action="javascript:alert('success!');" <div> <input type="text"> <input type="submit"> </div> </form> <script> // "function( evt )" is an anonymous function. It *is* your handler $( "form" ).submit(function( evt ) { // evt is the *event* object. // name it whatever you'd like. if ( $( "input:first" ).val() === "correct" ) { $( "span" ).text( "Validated..." ).show(); return true; } $( "span" ).text( "Not valid!" ).show().fadeOut( 1000 ); evt.preventDefault(); }); </script> </body> </html>