2012-04-11 6 views
0

Я пытаюсь выполнить некоторую простую проверку формы с использованием значений объекта javascript. Я знаю, что это не «идеальный», но я просто работаю с простой формой, которая не нуждается в железе.Как проверить поля формы с объектами javascript?

Пожалуйста, смотрите мою скрипку пример: http://jsfiddle.net/6dXd7/3/

Я пытаюсь, чтобы убедиться, что каждое поле формы имеет значение. Если это так, установите для значения myObj.fieldID значение yes.

Затем, при отправке формы, проверьте все существующие myObj.XXX и убедитесь, что все их значения: yes.

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

Вот код в jsfiddle например, связанного с выше:

<script> 
$(document).ready(function() { 
    var myObj = {}; 
    $("input.checkblank").blur(function() { 
     var inputID = $(this).attr("id"); 
     var contents = $("input#" + inputID).val(); 
     if (contents == "") { 
      $(myObj).data(inputID, "no"); 
     } else { 
      $(myObj).data(inputID, "yes"); 
     } 
    }); 
    $("#verify").click(function() { 
     if (myObj.first && myObj.second == "yes") { 
      // ***** Trying to get it to scan through ALL existing myObj's and make sure all their values are "yes" *****   
      $('.results').text('all good'); 
     } else { 
      $('.results').text('not good'); 
     } 
    }); 
}); 
</script> 

<input type="text" name="first" id="first" class="checkblank"><br /> 
<input type="text" name="second" id="second" class="checkblank"> 
<a href="#" id="verify">check</a><br /> 
<p class="results"> </p> 

+3

Почему бы не использовать [jQuery Validation Plugin] (http://bassistance.de/jquery-plugins/jquery-plugin-validation/)? – Sparky

+1

Почему вы используете jQuery.data() для простого объекта? Этот метод предназначен для привязки данных к элементам DOM как значения data-attr. – Mathletics

+1

jsFiddle отлично подходит для демонстрации вашего кода, но, пожалуйста, также разместите свой код в сообщении, чтобы этот вопрос оставался полезным долго после того, как ссылка замирает. – Sparky

ответ

1

Вы хранили данные поля в Jquery DATA и пытается проверить их позже, не в том же месте .. .

var obj = {} 
$(obj).data('a','1'); 
console.log(obj.a); //this will log null, cause there's no attribute 'a' in 'obj' 
console.log($(obj).data('a')); //this will log '1' :] 

вместо этого, вы должны хранить вам данные в атрибутах из собственного объекта, как это:

var obj = {} 
obj['a'] = '1'; //obj.a = '1' work's too 
console.log(obj.a); //now it log '1' :] 

Кроме того, ваша функция проверки неправильно .. это только проверка, если first существует внутри myObj и если second существует и равно "yes". Таким образом, ваша функция проверки должна быть что-то вроде этого:

$("#verify").click(function() { 
    var allFieldsOK = false; 
    for (var field in checkedFields) { 
     if (!(allFieldsOK = checkedFields[field])) break; 
    } 
    $('.results').text( allFieldsOK ? 'all good' : 'not good'); 
}); 

Вот обновление к вам jsFiddle, он работает для вас цель и должна работать, если добавить больше полей ввода с классом checkblank:] http://jsfiddle.net/6dXd7/5/

+1

Пожалуйста, не полагайтесь исключительно на jsFiddle для получения полного ответа. Когда ссылка будет мертвой, ваш ответ будет неполным. – Sparky

+0

Спасибо, я немного подправил ваш, но в основном использовал его. Работает хорошо. – JROB

+1

@ Sparky672 thx, я отредактировал мой вопрос, чтобы он полезен без jsFiddle: D –

0

заменить этот

$("#verify").click(.........}); 

с этим

$("#verify").click(function() { 
    var flag=true; 
    $('.checkblank').each(function(){ //check all elements with class checkblank 
     if($(this).val().length==0)  //set flag false if anyone of them is blank 
      flag=false;     
    }) 
    if (flag) { 
      $('.results').text('all good');  
     } else { 
      $('.results').text('not good'); 
     } 
}); 

... он должен работать

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