JavaScriptビット:
$(document).ready(function()
{
$('#form').submit(function(e)
{
e.preventDefault();
var $form = $(this);
// check if the input is valid
if(! $form.valid()) return false;
$.ajax(
{
type:'POST',
url:'add.php',
data:$('#form').serialize(),
success:function(response)
{
$("#answers").html(response);
}
});
})
});
HTMLビット:
<input type="text" name="answer[1]" class="required" />
<input type="text" name="answer[2]" class="required" />
これが私が使用しようとしているコードです。 Ajaxでフォームを送信する前に、すべての入力を検証するという考え方です。私は今、これの多数のバージョンを試しましたが、フォームが完全に記入されていなくても、毎回送信することになります。私の入力はすべて「必須」クラスのものです。誰かが私が間違っていることを見ることができますか?
また、入力名はphpで生成されるため、クラスベースの要件に依存しているため、取得する名前[id]や入力タイプを確認することはできません。
「ページ」で質問を表示しながら質問を表示/非表示します。
<input type="button" id="next" onClick="toggleVisibility('form3')" class="next-btn"/>
JS:
function toggleVisibility(newSection)
{
$(".section").not("#" + newSection).hide();
$("#" + newSection).show();
}
submitHandler
オプションを使用できます。基本的に、このハンドラー内に$.ajax
呼び出しを配置します。つまり、検証セットアップロジックで呼び出しを反転させます。
$('#form').validate({
... your validation rules come here,
submitHandler: function(form) {
$.ajax({
url: form.action,
type: form.method,
data: $(form).serialize(),
success: function(response) {
$('#answers').html(response);
}
});
}
});
jQuery.validate
プラグインは、検証に合格すると送信ハンドラーを呼び出します。
classRules
はjquery.validateプラグインによって自動的に検出されるため、最初にrequired
を明示的に追加する必要はありません。このコードを使用できます:
それ以外の場合、有効な場合はajaxリクエストを送信します。
$('#form').submit( function(e){
e.preventDefault();
var $form = $(this);
// check if the input is valid
if(! $form.valid()) return false;
$.ajax({
type: 'POST',
url: 'add.php',
data: $('#form').serialize(),
success: function(response) {
$("#answers").html(response);
}
});
});
あなたはやってみることができます:
if($("#form").validate()) {
return true;
} else {
return false;
}
この特定の例では入力をチェックするだけですが、微調整することもできます。このようなものを.ajax関数に追加してください。
beforeSend: function() {
$empty = $('form#yourForm').find("input").filter(function() {
return this.value === "";
});
if($empty.length) {
alert('You must fill out all fields in order to submit a change');
return false;
}else{
return true;
};
},
Jquery検証を備えたsubmitHandlerは良い解決策だと思います。このコードからアイデアを得てください。 @Darin Dimitrovからの着想
$('.calculate').validate({
submitHandler: function(form) {
$.ajax({
url: 'response.php',
type: 'POST',
data: $(form).serialize(),
success: function(response) {
$('#'+form.id+' .ht-response-data').html(response);
}
});
}
});
> Required JS for jquery form validation
> ## jquery-1.7.1.min.js ##
> ## jquery.validate.min.js ##
> ## jquery.form.js ##
$("form#data").validate({
rules: {
first: {
required: true,
},
middle: {
required: true,
},
image: {
required: true,
},
},
messages: {
first: {
required: "Please enter first",
},
middle: {
required: "Please enter middle",
},
image: {
required: "Please Select logo",
},
},
submitHandler: function(form) {
var formData = new FormData($("#image")[0]);
$(form).ajaxSubmit({
url:"action.php",
type:"post",
success: function(data,status){
alert(data);
}
});
}
});
私は最初にフォームを検証し、検証が合格した場合、ajaxポストを作成するよりも考えます。スクリプトの最後に「return false」を追加することを忘れないでください。
function validateForm()
{
var a=document.forms["Form"]["firstname"].value;
var b=document.forms["Form"]["midname"].value;
var c=document.forms["Form"]["lastname"].value;
var d=document.forms["Form"]["tribe"].value;
if (a==null || a=="",b==null || b=="",c==null || c=="",d==null || d=="")
{
alert("Please Fill All Required Field");
return false;
}
else{
$.ajax({
type: 'post',
url: 'add.php',
data: $('form').serialize(),
success: function () {
alert('Patient added');
document.getElementById("form").reset();
}
});
}
}
$(function () {
$('form').on('submit', function (e) {
e.preventDefault();
validateForm();
});
});
フォームネイティブJavaScript checkValidity
関数は、HTML5
検証をトリガーするのに十分です
$(document).ready(function() {
$('#urlSubmit').click(function() {
if($('#urlForm')[0].checkValidity()) {
alert("form submitting");
}
});
});