2011-12-30 2 views
2

Я использую проверку jquery 1.9.0. Я использовал последний JQuery и вернулся к 1.6.0. без изменения результатаПроверка Jquery не препятствует отправке формы

Моя проблема заключается в следующем: Когда я намеренно помещаю неправильные значения (недостаточно символов и т. д.), скрипт проверки корректно показывает ошибки, но позволяет передавать сценарий в любом случае. Я пробовал методы проверки, включая добавление правил, правил и очень простой вид формы ниже.

<script> 
jQuery.validator.setDefaults({ 
debug: true, 
success: "valid" 
}); 
</script> 

<script> 
$(function() {  
$("#comm").validate(); 

}); 
</script> 

форма

<form action="comm.php" method="post" name="comm" id="comm"> 
Name: <input type="text" name="name" id="name" minlength="3" class="required" /> 
Email:<input type="email" name="email" id="email" class="required email" /> <br /> 
<label for="comment"> Comment </label> <br /> 

<textarea name="comment" id="comment" cols="80" rows="5" minlength="6" class="required" /></textarea> 
<?php 
date_default_timezone_set('America/New_York'); 
$date = date("Y-n-j h:i:s");?> 

<input type="hidden" name="date" id="date" value="<?php echo $date; ?>" /> 
<?php $post_id = $id;?> 
<input type="hidden" name="post_id" id="post_id" value="<?php echo $post_id; ?>" /> 
<?php $ip = $_SERVER["REMOTE_ADDR"]; ?> 

<input type="hidden" name="ip" id="ip" value="<?php echo $ip; ?>" /> 

<input type="submit" value="Post" name="post" id="post" /> <input type="reset" value="Reset Form" name="reset" id="reset" /> 
</form> 

Очень простые вещи.

Представление происходит во всех моих формах в сети, и все они на локальном хосте. Я всегда могу обнаружить ошибки, но не останавливать их. Что я делаю не так?

Firebug показывает, что я правильно подал заявку и никаких ошибок скрипта. Также подключены все jquerys. Firebug также показывает мне это после представления novalidate = "novalidate" в форме html. используя onsubmit = возвращать ложь ничего не меняет

Я использую Ajax для отправки формы, работает безотказно

$(function() { 
    $("#comm").submit(function() {  
     var data = $('#comm').serialize(); 
     alert (data); return false; 


     $.ajax({ 
      url: "comm.php", 
      data: data, 
      type: "POST", 
      success: function(msg){ 
       if(msg){ 
        $('.comme').prepend().html(msg).show(); 
       }else{ 
        $('.comme').text("nothing came back"); 
       } 
      } 
     }); 
     return false; 
    }); 
}); 

Спасибо

ответ

3

Попробуйте выполнить обработку Ajax после нажатия кнопки отправки вместо того, чтобы делать с формой jQuery, возможно, вы отправляете данные формы только через Ajax.

$(function() { 
    $("#post").click(function() { 
    var data = $('#comm').serialize(); 

    // TODO: validate your data - $("#comm").validate(); 

    // TODO: submit your form though ajax 

    // Other operations on form data 

    return false; 
    }); 
}); 

Примечание: Если представление формы происходит с перенаправлением страниц, то попробуйте «onsubmit = вернуться ложным;».

Update:

Я, кажется, вы, чтобы отправить форму из обработчика представить обратного вызова функция Validate (в submitHandler), чтобы избежать перенаправления после подачи. Попробуйте проверить демонстрационный пример this, который отлично работает с отправкой формы Ajax, просмотрите исходный код этой страницы примера и затем соответствующим образом скорректируйте свой код.

var v = jQuery("#form").validate({ 
    submitHandler: function(form) { 
    jQuery(form).ajaxSubmit({ 
     target: "#result" 
    }); 
    } 
}); 
+0

. Обратите внимание, что обработка данных находится на '# post', а не на' # comm' – Brombomb

+0

в любом случае обработка данных/форм должна выполняться после нажатия кнопки отправки только, правильно? – Siva

+0

Дайте этот снимок этим вечером, чем вы – Brad

1

Если вы usig JQuery, чтобы получить форму, когда она , тогда вы должны указать файл php, содержащий код jquery, как действие формы, вместо «прослушивания» события отправки. Другим вариантом было бы позволить параметр «действие» пустым. Дело здесь в том, что вы отправляете форму дважды: когда вы нажимаете на вершину, форма автоматически отправляется в файл, указанный в параметре «действие» (это будет представление, которое происходит, поскольку оно не имеет проверки) ; и в то же время, когда вы нажимаете кнопку «Отправить», он также запускает запрос ajax, который будет выполнять проверку, а в случае успеха повторите отправку.

+0

Я попробовал ваше предложение, но все равно получаю тот же результат. – Brad

+0

Я удалил действие из формы, а не из сценария jquery. – Brad

+0

Как насчет включения запроса ajax в это: if ($ ("# comm"). Validate()) {// ajax-запрос} –

Смежные вопросы