ФорумПрограммированиеJavaScript → Проверка формы на заполнение

Проверка формы на заполнение

  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 24 января 2011 г. 23:52

    Есть анкета состоящая из radio button. Несколько вопросов и нужно выбрать да/нет (value 1/0). При выборе ответа ДА появляется доп вопрос тоже radio. Нужно проверить все ли кнопки отмечены и если выбран ответ ДА, проверить выбран ли ответ на доп вопрос.
    Подскажите как лучше это реализовать на jQuery. Подумываю на счет each() но не совсем уверен как это сделать. Прописывать проверку вручную для каждого вопроса как-то не хочется. Смысл в том, чтобы пока все поля не будут заполнены должным образом не давать отправить форму.
    from TRIAL with LOVE
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 26 января 2011 г. 1:38, спустя 1 день 1 час 45 минут

    Сделал, по моему мнению, адски кривым способом:
    $(function() {
    $("form")
    .click(function() {

    var button = new Array();

    for(var i = 1; i<16; i++) {

    var v = $("input[name=q" + i + "]:checked").val();

    if(v == "0" || v == "1") button = "1";
    else button = "0";

    if(v == "1") {

    switch(i) {

    case 1 :

    var value = $("input[name=q1_1]").val();
    if(value.length < 1) button[16] = "0";

    break;

    case 2 :

    var value = $("input[name=q2_1]:checked").val();
    if(typeof value == "undefined") button[17] = "0";

    break;

    case 3 :

    var v1 = $("input[name=q3_1]").val();
    var v2 = $("input[name=q3_2]").val();
    var v3 = $("input[name=q3_3]:checked").val();
    if(v1.length < 1 || v2.length < 1 || typeof v3 == "undefined") button[18] = "0";

    break;

    case 5 :

    var value = $("input[name=q5_1]:checked").val();
    if(typeof value == "undefined") button[19] = "0";

    break;

    case 6 :

    var value = $("input[name=q6_1]:checked").val();
    if(typeof value == "undefined") button[20] = "0";

    break;

    case 7 :

    var value = $("input[name=q7_1]:checked").val();
    if(typeof value == "undefined") button[21] = "0";

    break;

    case 9 :

    var value = $("input[name=q9_1]:checked").val();
    if(typeof value == "undefined") button[22] = "0";

    break;
    }
    }
    }

    if(jQuery.inArray("0", button) < 0) $("#button").removeAttr("disabled");
    else $("#button").attr("disabled", "disabled");
    });
    });

    Кто что скажет толкового? :)
    PS. Работает только в ИЕ, придется кнопку как-то иначе скрывать.
    from TRIAL with LOVE
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 26 января 2011 г. 2:12, спустя 34 минуты 45 секунд

    Оказалось что $("form") понимает только ИЕ, все остальные браузеры отказываются реагировать на события внутри формы, пришлось заменить на body, пока вроде всё работает.
    from TRIAL with LOVE
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 26 января 2011 г. 2:17, спустя 4 минуты 17 секунд

    TRIAL, не помню как в жквери но на прототайпе можно так :
    $("form").observe('form:changed', function(event){
    // your handler
    });

    как по мне так чуток правильнее
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 января 2011 г. 2:22, спустя 5 минут 44 секунды

    NRG, буээ ну прототайп и гавно)
    Сапожник без сапог
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 26 января 2011 г. 2:26, спустя 3 минуты 58 секунд


    NRG, буээ ну прототайп и гавно)
    phpdude, я имел ввиду чт онадо вешатся не на онклик формы а на ончейндж
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 января 2011 г. 2:43, спустя 16 минут 33 секунды

    NRG, согласись гавно =)
    Сапожник без сапог
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 26 января 2011 г. 2:44, спустя 58 секунд

    по сравнению с жуквери - да, говноватенько
  • master

    Сообщения: 3242 Репутация: N Группа: Джедаи

    Spritz 26 января 2011 г. 5:09, спустя 2 часа 24 минуты 43 секунды

    онсабмит блеать
    Спустя 211 сек.
    <form onsubmit="return validate_function();">



    function validate_function(){
    x = $('#element_id'); if (!x.val().match(/\S/gi)) { alert('Заполни поле, пидорас!'); x.focus(); return false;}
    return true;
    }
    не всё полезно, что в swap полезло
  • master

    Сообщения: 3242 Репутация: N Группа: Джедаи

    Spritz 26 января 2011 г. 5:41, спустя 32 минуты 43 секунды

    а ещё можно

    <form onsubmit="return validate_function(this);">



    function validate_function(form){
    тут перебираем поля form
    }
    не всё полезно, что в swap полезло
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 26 января 2011 г. 6:19, спустя 37 минут 42 секунды

    Бедняжки, required вам в помощь
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 26 января 2011 г. 6:27, спустя 8 минут 19 секунд

    Замечательная вещь :)
    И сколько браузеров сейчас ее поддерживают?!!
    from TRIAL with LOVE
  • master

    Сообщения: 3242 Репутация: N Группа: Джедаи

    Spritz 26 января 2011 г. 7:37, спустя 1 час 9 минут 51 секунду

    required

    проверяет на заполненность но не на соответствие регулярке
    не всё полезно, что в swap полезло
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 26 января 2011 г. 19:48, спустя 12 часов 10 минут 48 секунд


    required

    проверяет на заполненность но не на соответствие регулярке


    тема была не о регулярке или не? ну на этот случай есть pattern
    Спустя 34 сек.

    Замечательная вещь :)
    И сколько браузеров сейчас ее поддерживают?!!


    точно знаю что опера 11 поддерживает остальные хз
    Спустя 158 сек.
    вот тут проде можно глянуть:
    http://tinyurl.com/html5orly

    но хз как часто там обновляют инфу
    Спустя 87 сек.
    required сейчас поддерживают chrome safari opera
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 26 января 2011 г. 19:59, спустя 10 минут 52 секунды

    короче делаете жабаскрипт документ и проверяете если Mozilla то биндите к форме проверочные скрипты через жквери
    Спустя 47 сек.
    А ваще нет не через Mozilla ибо chrome и safari тоже mozilla :)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!