2012-05-06 2 views
0

Я пытаюсь добавить подтверждение в форму, представленную ajax, и частично ее работаю.Объединение двух функций javascript для проверки формы и отправки ее через ajax

Вот код, который отправляет форму:

<script type="text/javascript"> 
$(document).ready(function(){$(".sendName").click(function(){ 
var Email=$("#Email").val(); 
var Name=$("#Name").val(); 
var ErrorType=$("input:radio[name=ErrorType]:checked").val(); 
var Univer=$("#Univer").val(); 
var ErrorMessage=$("#ErrorMessage").val(); 
$.post("report.php",{Email:Email,Name:Name,ErrorType:ErrorType,Univer:Univer,ErrorMessage:ErrorMessage},function(data){$("#loadName").html(data).effect('bounce', { times: 5, distance: 30 }, 300); 
    }); 
}); 
}); 
</script> 

Этот код работает отлично.

Я также использую плагин livevalidation, и в основном он работает. Единственная проблема, с которой я столкнулся, - это вызвать код проверки из функции, которая отправляет форму.

Обычно код проверки называется так:

<form onsubmit="return validate(this)"> 

Однако, поскольку форма представляется на AJAX текущая форма тег:

<form onSubmit="return false;"> 

Так что мне нужно, чтобы быть в состоянии для этого нужно вызвать функцию validate из функции, которая отправляет форму через ajax.

Как бы я сделал что-то подобное? Оба сценария работают отлично сами по себе, это всего лишь последнее, что мне нужно выяснить.

Поэтому мне нужно вызвать функцию проверки, когда вызывается функция ajax, и если форма проверяет скрипт, он может выполнить запрос ajax и если форма не проверяет его, его не следует подавать.

Я искал и нашел пару похожих вопросов, но никаких решений. Любая помощь будет оценена по достоинству.

ответ

0

Более простой способ сделать это - только отменить отправку, если есть ошибка проверки, в противном случае передача будет происходить в обычном режиме.

<form id="new-item" method="post" action="/i"> 

Затем в JavaScript:

$('#new-item').submit(function() { 

    var valid = true; 

    // do you validation logic 
    valid = validate(this); 

    // returning true will let the normal submit action happen 
    // returning false will prevent the default action (i.e. the form will not be sumitted) 
    return valid; 

}); 

Если вы не хотите, чтобы использовать функциональные возможности стандартной представить (хотя это лучшая практика, так как он работает, когда Javascript отключен) вы бы сделать аналогичная вещь, но всегда возвращает false.

$('#new-item').submit(function() { 

    var valid = true; 

    // do you validation logic 
    valid = validate(this); 

    if (valid) { 
    // send your ajax post request here 
    } 


    // returning true will let the normal submit action happen 
    // returning false will prevent the default action (i.e. the form will not be sumitted) 
    return false; 

}); 
+0

По какой-то причине, я получаю сообщение об ошибке, "Validate не определен" , Однако эта функция содержится во внешних файлах JS, которые включены в страницу выше кода, вызывающего функцию. Есть идеи? –

+0

Невозможно увидеть какой-либо код, к сожалению. Невозможно экспортировать правильно (вы можете искать функцию проверки на объекте 'window', чтобы проверить это). – Bill

+0

Какой код вам нужен? В моем исходном сообщении показан код, используемый для отправки формы через ajax. Единственным другим кодом является код liveValidation. Он включен в страницу, над сценарием отправки, и работает отлично сам по себе.Однако, когда я пытаюсь вызвать функцию validate из кода представления, я получаю ошибку «Validate not defined». Однако при вызове через метод onsubmit формы функция проверки достоверна. Проблема в том, что мне нужно вызвать эту функцию из функции отправки. –

0

Соглашаясь с законопроектом

Assumning эту форму

<form id="formId" ... 
    . 
    . 
    <input type="submit" /> 
</form> 

Использование кода:

<script type="text/javascript"> 
$(document).ready(function(){ 
    $("#formId").submit(function(){ 
    if (!validate(this)) return false; 
    var Email=$("#Email").val(); 
    var Name=$("#Name").val(); 
    var ErrorType=$("input:radio[name=ErrorType]:checked").val(); 
    var Univer=$("#Univer").val(); 
    var ErrorMessage=$("#ErrorMessage").val(); 
    $.post("report.php", 
     {Email:Email,Name:Name,ErrorType:ErrorType,Univer:Univer,ErrorMessage:ErrorMessage},function(data){$("#loadName").html(data).effect('bounce', { times: 5, distance: 30 }, 300); 
    }); 
    return false; // cancel normal submission 
    }); 
}); 
</script> 
Смежные вопросы