简体   繁体   English

除非单击两次提交按钮,否则表单无法提交且jQuery验证不起作用

[英]Form not submitting and jQuery validation not working unless submit button is clicked twice

I created a form to send out texts. 我创建了一个表格来发送文本。 My issue is I have to hit the submit button twice for the form to get the form to send or for the validation to work. 我的问题是我必须点击两次提交按钮才能使表单发送或验证生效。 I am wanting the validation to work right after the user goes to the next input or at the very least on the first form submission. 我希望验证能够在用户转到下一个输入之后或至少在第一次提交表单时立即起作用。

Why is the form's button needing clicked on twice for any of this to work? 为什么需要两次单击表单的按钮才能使其中的任何一个起作用? I created a snippet that shows what it is doing. 我创建了一个片段来显示它在做什么。

 $('.text-popup').hide(); //$("#submit-text").on("click", function(event) { $("#text-form").on("submit", function(event) { event.preventDefault(); var number = $("#number").val(); var carrier = $("#carrier").val(); var message = $("#message").val(); var targeted_popup_class = jQuery(this).attr('data-popup-open'); $("#text-form").validate({ onfocusout: true, rules: { number: { required: true, minlength: 2 }, carrier: { required: true }, message: { required: true, minlength: 2 } }, messages: { number: { required: "Please enter the party's phone number.", minlength: "The phone number seems a bit short, doesn't it?" }, carrier: { required: "Please choose their carrier" }, message: { required: "Please enter your message", minlength: "Your message seems a bit short. Please enter at least 2 characters" } }, submitHandler: function(form) { $.ajax({ url: "text-send.php", type: "POST", data: { "number": number, "carrier": carrier, "message": message }, success: function(data) { //console.log(data); // data object will return the response when status code is 200 if (data == "Error!") { alert("Unable to send email!"); alert(data); } else { $("#text-form")[0].reset(); $('.text-popup').fadeIn(350).delay(2000).fadeOut(); } }, complete: function() { $('body, html').animate({ scrollTop: $('#text-success').offset().top }, 'slow'); }, error: function(xhr, textStatus, errorThrown) { alert(textStatus + "|" + errorThrown); //console.log("error"); //otherwise error if status code is other than 200. } }); } }) }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.js"></script> <form action="" method="POST" id="text-form"> <input type="number" name="number" placeholder="Recipient Phone Number" class="number-input" id="number"> <select class="carrier-input" id="carrier" name="carrier"> <option selected="selected">Phone Carrier</option> <option value="vtext.com">Verizon</option> <option value="vmobl.com">Virgin Mobile</option> <option value="sms.alltelwireless.com">Alltel</option> <option value="txt.att.net">AT&T</option> <option value="sms.myboostmobile.com">Boost Mobile</option> <option value="text.republicwireless.com">Republic Wireless</option> <option value="messaging.sprintpcs.com">Sprint</option> <option value="tmomail.net">T-Mobile</option> <option value="email.uscc.net">US Cellular</option> </select> <textarea placeholder="Your Message" class="message-input" id="message" name="message" rows="10"></textarea> <input type="submit" value="Send Text" id="submit-text"> <div class="text-popup" data-popup="popup-1"> <div class="popup-inner"> <div id="popup-inner-content">Your text successfully sent!</div> <a class="popup-close" data-popup-close="popup-1" href="#">x</a> </div> </div> </form> 

The issue that you are experiencing is the validate plugin doesn't need to be wrapped in the onclick. 您遇到的问题是validate插件不需要包装在onclick中。 Remove the Onclick event around it. 删除其周围的Onclick事件。 The validate plugin runs ONSUBMIT of the form. validate插件运行表单的ONSUBMIT。

 $('.text-popup').hide(); var number = $("#number").val(); var carrier = $("#carrier").val(); var message = $("#message").val(); var targeted_popup_class = jQuery(this).attr('data-popup-open'); $("#text-form").validate({ onfocusout: true, rules: { number: { required: true, minlength: 2 }, carrier: { required: true }, message: { required: true, minlength: 2 } }, messages: { number: { required: "Please enter the party's phone number.", minlength: "The phone number seems a bit short, doesn't it?" }, carrier: { required: "Please choose their carrier" }, message: { required: "Please enter your message", minlength: "Your message seems a bit short. Please enter at least 2 characters" } }, submitHandler: function(form) { $.ajax({ url: "text-send.php", type: "POST", data: { "number": number, "carrier": carrier, "message": message }, success: function(data) { //console.log(data); // data object will return the response when status code is 200 if (data == "Error!") { alert("Unable to send email!"); alert(data); } else { $("#text-form")[0].reset(); $('.text-popup').fadeIn(350).delay(2000).fadeOut(); } }, complete: function() { $('body, html').animate({ scrollTop: $('#text-success').offset().top }, 'slow'); }, error: function(xhr, textStatus, errorThrown) { alert(textStatus + "|" + errorThrown); //console.log("error"); //otherwise error if status code is other than 200. } }); } }) 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.js"></script> <form action="" method="POST" id="text-form"> <input type="number" name="number" placeholder="Recipient Phone Number" class="number-input" id="number"> <select class="carrier-input" id="carrier" name="carrier"> <option value="" selected="selected">Phone Carrier</option> <option value="vtext.com">Verizon</option> <option value="vmobl.com">Virgin Mobile</option> <option value="sms.alltelwireless.com">Alltel</option> <option value="txt.att.net">AT&T</option> <option value="sms.myboostmobile.com">Boost Mobile</option> <option value="text.republicwireless.com">Republic Wireless</option> <option value="messaging.sprintpcs.com">Sprint</option> <option value="tmomail.net">T-Mobile</option> <option value="email.uscc.net">US Cellular</option> </select> <textarea placeholder="Your Message" class="message-input" id="message" name="message" rows="10"></textarea> <input type="submit" value="Send Text" id="submit-text"> <div class="text-popup" data-popup="popup-1"> <div class="popup-inner"> <div id="popup-inner-content">Your text successfully sent!</div> <a class="popup-close" data-popup-close="popup-1" href="#">x</a> </div> </div> </form> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM