2013-09-09 3 views
5

Я настроил проверку для своей формы с помощью проверки jQuery. К сожалению, в некоторых случаях я хочу позвонить $("#clientConfigurationForm").valid(), чтобы заставить переоценку, когда пользователь включает/отключает этот флажок. Я хочу, чтобы формы ввода, которые в настоящее время недействительны, игнорируются (и теряют состояние проверки), когда они отключены, и вызывается .valid(). В настоящее время это не происходит. Как я могу заставить это работать?Проверка jQuery проверяет заблокированные поля ввода

Чекбокс события

$("#clientConfigurationForm").on("change","input[type=checkbox]",function(){ 
    $(this) 
     .closest("div") 
     .find("input, select") 
     .not(this) 
     .not(":submit") 
     .prop("disabled", !$(this).prop("checked")) 
     .each(function(){ 
      $(this).valid(); 
     }); 
}); 

Validation Code

$("#clientConfigurationForm").validate({ 
    onkeyup: function (element) { 
     $(element).valid(); 
    }, 
    focusInvalid: false, 
    invalidHandler: function(form, validator) { 
     if (!validator.numberOfInvalids()) 
      return; 

     // Find out what my ID is 
     var formIndex = $(validator.errorList[0].element).prop("id").replace(/[A-Za-z]+/g, ''); 
     $("#clientSettingsLinks a").eq(formIndex).trigger("click"); 
    }, 
    errorPlacement: function (error, element) { 
     var parent = $(element).parent(); 
     var validationContainer = parent.find(".validationResult"); 

     if (validationContainer.length == 0){ 
      validationContainer = $('<span class="validationResult"><i class="'+errorIconClass+' inputValidationIcon"></i></span>'); 
      parent.append(validationContainer); 
     } 

     validationContainer.addClass("tooltip").attr("title", error.text()); 
    }, 
    highlight: function (element, errorClass, validClass) { 
     $(element).parent().find("i").removeClass("icon-ok").addClass(errorIconClass); 

     $(element).addClass("error"); 
    }, 
    unhighlight: function (element, errorClass, validClass) { 
     $(element).parent().find("i").removeClass(errorIconClass).addClass("icon-ok"); 
     $(element).parent().find("span.validationResult.tooltip").removeClass("tooltip").attr("title", ""); 

     $(element).removeClass("error"); 
    }, 
    submitHandler: function(form) { 
     alert("SUBMITTED YO"); 
    } 
}); 
+0

Вы можете уточнить эту скрипку: http://jsfiddle.net/mplungjan/SjH4A/ – mplungjan

+0

@mplungjan Спасибо за реагирование, пожалуйста, проверьте обновление HTTP: //jsfiddle.net/SjH4A/1/ - если вы заметили, что если вы сделаете валидацию неудачной в поле ввода, установите галочку, чтобы ее отключить, проверка не удалена. – Chris

ответ

4

Documentation:Входы типа отправки и сброса всегда игнорируются, поэтому отключены элементы.

Однако, похоже, вы нашли что-то странное.

Это работает

Live Demo

var val; 
$("#clientConfigurationForm").on("change", "input[type=checkbox]", function() { 
    val.resetForm(); 
    $(this) 
     .closest("div") 
     .find("input, select") 
     .not(this) 
     .not(":submit") 
     .prop("disabled", !$(this).prop("checked")) 
     .not(":disabled") 
     .each(function() { 
      $(this).valid(); 
     }); 
}); 

val = $("#clientConfigurationForm").validate({ 

    onkeyup: function (element) { 
     $(element).valid(); 
    }, 
    focusInvalid: false, 
    submitHandler: function (form) { 
     alert("submitted"); 
    } 
}); 
+0

Если я удалю все настройки проверки, у него все еще есть такая же проблема – Chris

+0

Посмотрите на первый блок кода по моему вопросу, да, я делаю! Это действительно странно, поскольку я думал, что это стандартное поведение:/'.prop (« disabled »,! $ (This) .prop (« checked »))' – Chris

+0

См. Обновление - я надеюсь, что кто бы ни запустил сброс или перевернул – mplungjan