2013-03-12 2 views
1

Я имею вопрос после того, как сбросить свою форму с помощью:JQuery проверка не работает после сброса формы

$(".cancel").click(function() { 
     validator.resetForm(); 
     $(':input', '#MyForm') 
      .not(':button, :submit, :reset, :hidden') 
      .val('') 
      .removeAttr('checked') 
      .removeAttr('selected'); 
     //OR 
     document.getElementById('MyForm').reset(); 
}); 

Когда я ударил сохранить снова, необходимые поля больше не нужны и посты формы обратно. Как я могу получить форму для повторной проверки даже после сброса?

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

Это MVC создана форма, если это делает никакой разницы

Любые предложения?

EDIT: После некоторых проб и ошибок, похоже, что проблема не должна заключаться в прямом сбросе кода, а скорее в другом.

В консоли я получаю следующее сообщение об ошибке: яваскрипта

SyntaxError: invalid label 

и предупреждение

Use of attributes' specified attribute is deprecated. It always returns true. 

Не уверен, если они связаны с моей проблеме, но не уверен, что еще делать в этом точка.

Что касается сценариев, я использую:

@Scripts.Render("~/bundles/modernizr") 
@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/Scripts/jquery-1.8.3.min.js") 
@*@Scripts.Render("~/Scripts/jquery-1.9.1.min.js")*@ 
@Scripts.Render("~/Scripts/jquery-ui-1.9.2.js") 
@Scripts.Render("~/Scripts/jquery.validate.js") 
@Scripts.Render("~/Scripts/jquery-validate-messages.js") 
@Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js") 
@Scripts.Render("~/Scripts/DataTables-1.9.4/media/js/jquery.dataTables.js") 
@Scripts.Render("~/Scripts/jquery.jeditable.mini.js") 
@Scripts.Render("~/Scripts/DataTables-1.9.4/media/js/jquery.dataTables.editable.js") 
@Scripts.Render("~/Scripts/DataTables-1.9.4/extras/TableTools/media/js/TableTools.js") 
@Scripts.Render("~/Scripts/Countdown.js") 
@Styles.Render("~/Scripts/DataTables-1.9.4/media/css/jquery.dataTables.css") 
@RenderSection("scripts", required: false) 

1.9.1 прокомментировал, потому что он ломится на первом вызове JQuery. Связано ли это?

+0

У вас есть какие-либо вызовы '$ .ajax', запущенные на этой странице? – darshanags

ответ

1

нашел способ, чтобы заставить его повторно Validate on:

$(".cancel").click(function() { 
     $('#FormId')[0].reset(); 
     validator.resetForm(); 
    }); 

    $("#submitForm").click(function() { 
     if ($("#FormId").valid()) { 
      $("#FormId").submit(); 
     } 
    }); 

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

1

Попытка установить проверку снова с помощью:

$j.validator.unobtrusive.parse('#MyForm'); 

EDIT

Вы можете попробовать сбросить форму с кнопкой сброса, поместите это внутри формы:

<button class="reset-button" type="reset">Reset form</button> 

и отключите обработчик событий на .cancel. Или измените его на:

$('.cancel').click(function() { 
    $('.reset-button').click(); 
}); 

и скрыть кнопку сброса, если вы не хотите его показывать.

+0

Я пробовал это, но теперь он не проверяет форму вообще. Я попытался включить jquery.unobtrusive до и после jquery.validate, но проверки больше нет. Я собираюсь продолжать возиться, но просто хотел получить это, прежде чем ты забудешь обо мне =) – DeiasR

+0

Просто попробовал скрытую кнопку сброса. Он работает, потому что он перезагружает форму, но после сброса все еще разрешает отправку. – DeiasR

+0

Любые ошибки javascript в консоли'? – iappwebdev

0

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

$(".cancel").click(function() { 
     $('#FormId')[0].reset(); 
    }); 

и проверка держать работу гладкой

+0

Пробовал это так, все равно не повезло. Форма по-прежнему разрешена для отправки после сброса – DeiasR

+0

Форма все еще разрешена для отправки ??? но вы должны использовать .valid() перед отправкой формы 'if ($ ('# FormId'). valid()) { // do submit ... }' –

0

попробовать следующее:

var validator = $("#FormId").validate(); 

$(".cancel").click(function() { 
    $('#FormId')[0].reset(); 
    validator.resetForm(); 
}); 

Пример fiddle

+0

Просто попробовал, что все еще можно отправить после отмены ... была настоящая надежда на то, что один = P – DeiasR

+0

, отправив после отмены работы для меня в скрипке. Это не работает для вас? @DeiasR – darshanags

+0

Нет, отменить все еще разрешает повторную передачу. Это странная проблема, и я не совсем уверен, что ее вызывает. – DeiasR

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