2012-05-11 2 views
0

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

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

Функция: -

function checkForm(){ 
$('#contact :input').each(function(){ 
    if($(this).attr('value') == null){ 
    var checked = false; 
    } else { 
    var checked = true; 
    } 
}) 
if (checked == true){ 
    alert('all filled in'); 
    //remove disabled attribute from button 
} else { 
    alert('not completed'); 
    //add disabled attribute to button 
} 

} 

И код, который вызывает функцию: -

$('#contact :input').blur(function(){ 
    if ($(this).val() <= ''){ 
     $(this).next('.error').show(); 
    } else { 
     $(this).next('.error').hide(); 
     checkForm(); 
    } 
}) 

Я возился с этим весь день, и я изо всех сил, чтобы найти ответ с помощью Google ,

+1

Там может быть проблема с тем, как вы сравниваете 'если ($ (это) .val() <= '') {' – TRR

ответ

1
function checkForm(){ 
    var checked = true; 
    $('#contact :input').each(function(){ 
    if(!$.trim($(this).val()).length) checked = false; 
    }) 
    if (checked){ 
    alert('all filled in'); 
    //remove disabled attribute from button 
    } else { 
    alert('not completed'); 
    //add disabled attribute to button 
    } 
} 

И вызвать функцию

$('#contact :input').on('blur', function(){ 
    if (!$.trim($(this).val()).length){ 
     $(this).next('.error').show(); 
    } else { 
     $(this).next('.error').hide(); 
     checkForm(); 
    } 
}) 
+0

Darn it, я сделал «if (checked)» раньше :) - Этот пример, кажется, делает то, что мне нужно, чтобы это сделать - спасибо, что вырезали код. – Andrew

0

коррекция:

function checkForm(){ 
$('#contact :input').each(function(){ 
if($(this).val() == ''){ 
    var checked = false; 
    } else { 
var checked = true; 
} 
}) 
if (checked == true){ 
alert('all filled in'); 
//remove disabled attribute from button 
} else { 
alert('not completed'); 
//add disabled attribute to button 
} 

} 

и

$('#contact :input').blur(function(){ 
if ($(this).val() == ''){ 
    $(this).next('.error').show(); 
} else { 
    $(this).next('.error').hide(); 
    checkForm(); 
} 
}) 
+0

Спасибо за ответ. Я почти уверен, что раньше делал этот подход, но я только что попробовал еще раз, и он все равно не вызывает никаких предупреждений внизу function – Andrew

+0

, затем добавьте предупреждение о $ (this) .val(), чтобы проверить, какое значение вы получаете и что хотите получить. – Rizstien

+0

также проверьте, какое значение вы получаете для поля 'checked' – TRR

1

Поскольку вы создаете " checked "внутри анонимной функции .each(), проверенная переменная недоступна вне этой функции для теста if (checked == true) (вы получаете ошибку« checked is undefined ») поэтому ваши предупреждения не стреляют.

Попробуйте сначала определить переменную 'checked' за пределами анонимной функции, а затем обновить ее соответствующим образом.

function checkForm() { 

    var checked = true; 

    $('#contact :input').each(function() { 
     if ($(this).val() == '') { 
      checked = false; 
     } 
    }) 

    if (checked == true) { 
     alert('all filled in'); 
     //remove disabled attribute from button 
    } else { 
     alert('not completed'); 
     //add disabled attribute to button 
    } 

} 

$('#contact :input').blur(function() { 
    if ($(this).val() == '') { 
     $(this).next('.error').show(); 
    } else { 
     $(this).next('.error').hide(); 
     checkForm(); 
    } 
}) 

Вот пример jsFiddle. http://jsfiddle.net/DMLzK/1/

+0

Я понимаю, почему он сейчас не работает, спасибо. – Andrew

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