2013-10-08 3 views
0

Я использую genvalidator, чтобы иметь некоторые тесты по полям ввода в форме. Проблема в том, что я не могу найти способ проверить, был ли установлен флажок. Вот как все поля установлены:genvalidator: check for checkbox in form validation

frmvalidator.addValidation("name","req","Insert your name"); 
frmvalidator.addValidation("city","req","Insert your city"); 
frmvalidator.addValidation("phone","req","Insert your phone number"); 

Это мой флажок

<input type="checkbox" name="agree" id="agree "value="yes"/> 

Как я могу сделать обязательным с genvalidator?

Это та часть, которая управляет процессом формы (короче: если не ошибки, это нормально):

if(empty($name)||empty($city)||empty($phone)||BLAHBLAH) 
{ 
    $errors .= "\n Mandatory field. "; 
} 


if(empty($errors)) 
{ 
    // send the email 
} 

Он пытался с этим JS код не повезло:

function validate(form) { 

if(!document.form1.agree.checked){alert("Please check the terms and conditions"); 
return false; } 


return true; 
} 

Если возможно, я хотел бы использовать функции genvalidator. :)

+1

Определенно не дубликат этого вопроса. Этот вопрос относится конкретно к использованию javascript-плагина 'genvalidator'. – gibberish

ответ

1

Вы затрачивая много энергии, пытаясь сделать яваскрипт работы плагина.

Считаете ли вы работу с jQuery? Если вы еще не пинали свои шины, это намного проще, чем кажется - и гораздо более однородным/быстрым, чем обычный js.

Чтобы использовать JQuery, вам нужно всего лишь включить библиотеку JQuery в документе, как правило, в голову теги, таким образом:

<head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
</head> 

Затем, вы можете легко создавать свои собственные процедуры проверки, с полным контролем над тем, что ты делаешь.


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

При нажатии кнопки «Отправить» (#mysub) мы быстро проверяем каждое поле, чтобы проверить, проверено ли оно. Если какое-либо поле не проходит проверку, мы можем вернуть управление пользователю с цветом и фокусом поля.

Если все поля проходят проверку, то мы выдаем метод submit() на идентификаторе формы и выходим из него (в указанное в атрибуте action="somepage.php").

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

Хммммм. Я думаю, что было бы более эффективно иметь класс с определенными атрибутами и добавлять/удалять этот класс, если проверка отказов. Хорошо, мне понравилась эта идея, и я создал a new jsFiddle, используя этот метод, чтобы продемонстрировать, как это будет выглядеть.

jsFiddle here

HTML:

<form id="fredform"> 
    First Name: <input id="fname" name="fname" type="text"/> 
    Last Name: <input id="fname" name="fname" type="text"/> 
    Email: <input id="fname" name="fname" type="text"/> 
    <input id="mysub" type="button" value="Submit" /> 
</form> 

JQuery:

arrValidate = ['fname','lname','email'] 

$('#mysub').click(function() { 
    var nextFld, i ; 
    for (i=0; i<arrValidate.length; i++){ 
     nextFld = arrValidate[i]; 
     if ($('#'+nextFld).val() == '') { 
      alert('Please complete all fields. You missed the [' +nextFld+ '] field.'); 
      $('#'+nextFld).css({'border':'1px solid red','background':'yellow'}); 
      $('#'+nextFld).focus(); 
      return false; 
     } 
    } 

    //if it gets here, all is okay: submit! 
    $('#fredform').submit(); 
}); 

//Remove any css validation coloring 
$('input:not([type=button])').blur(function(){ 
    $(this).css({'border':'1px solid lightgrey','background':'white'}); 
}); 

Обратите внимание, что я s также плагин проверки jQuery, который выглядит очень профессионально. Я не играл с ним сам, всегда предпочитая закодировать свой собственный материал, но вот ссылка:

http://jqueryvalidation.org/documentation/

Обратите внимание на very cool demo

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


`  ANSWER TO YOUR COMMENT QUESTION:           ` 

Что касается комментарий и :

(Извините за длинный ответ, но я хочу, чтобы это было ясно, пожалуйста, внимательно прочитайте..)

(1) Пожалуйста, заверните свой javascript-код в функцию document.ready. Это моя вина; Я должен был добавить его в свой пример кода. В противном случае код будет выполняться до того, как DOM будет полностью существовать, а триггеры событий не будут привязаны к элементам управления (потому что они еще не существуют в DOM). Поэтому:

arrValidate = ['checkbox']; //a global variable 
$(document).ready(function() { 

    $('#submit').click(function() { 
     var nextFld, i ; 
     for (i=0; i<arrValidate.length; i++){ 
      nextFld = arrValidate[i]; 
      if ($('#'+nextFld).val() == '') { 
       alert('Please complete all fields. You missed [' +nextFld+ ']'); 
       $('#'+nextFld).css({'border':'1px solid red','background':'yellow'}); 
       $('#'+nextFld).focus(); 
       return false; 
      } 
     } 

     //if it gets here, all is okay: submit! 
     $('#contact_form').submit(); 
    }); //END #submit.click 

}); //END document.ready 

(2) Ваш флажок еще имеет атрибут value="yes", который ломает JavaScript. Пожалуйста, измените это:

<input type="checkbox" name="checkbox" id="checkbox" value="yes" /> <small>Ho 

к этому:

<input type="checkbox" name="checkbox" id="checkbox" /> <small>Ho 

(3) Там нет необходимости иметь type="submit" для <input value="Invia"> кнопки, и при этом нет необходимости в атрибуте на что name= контроль.

Первый атрибут name=: он полезен только при передаче данных из этого элемента управления в файл PHP (?), Который обрабатывает вашу форму: ($_SERVER['SCRIPT_NAME']). Часть name= - это имя переменной, а значение элемента управления - значение переменной. Кнопка не имеет данных для передачи, поэтому нет необходимости назначать ей имя переменной.

Далее type="submit": Это не требуется, поскольку вы можете использовать jQuery для отправки формы в любое время. В старые времена, перед javascript/jQuery, у нас были формы. В те дни единственным способом сделать подачу формы было использование атрибута type="submit". Не было такой команды, как: $('#myFormId').submit(); - но сегодня есть. Поэтому измените этот атрибут на type="button" и дайте jQuery отправить форму для вас. Поверьте мне, это работает!

Еще одна вещь, которую следует учитывать: после использования type="submit" вы должны иметь дело с действиями формы по умолчанию при нажатии этой кнопки. Вы не можете просто вернуть управление пользователю при возникновении ошибки, так как форма была передана. (Вы должны использовать event.preventDefault() переопределить поведение по умолчанию -. Вы можете прочитать об этом позже)

(4) значения Флажок должны быть проверены с помощью one of these methods. Флажки не имеют значения. Это моя ошибка снова, я должен был бы установить флажок в свой пример.

$('#submit').click(function() { 
    var nextFld, i ; 

    //Validate the checkbox: 
    if ($('#checkbox').is(':checked') == false) { 
     alert('You must read the informativa and check the checkbox at bottom of form'); 
     return false; 
    } 

    //Validate the rest of the fields 
    for (i=0; i<arrValidate.length; i++){ 

(5) метод JQuery в submit() не будет работать, если любой элемент использует =submit либо как его имя = или ID = атрибут.

Это странно, но вам нужно это знать. Я только что узнал об этом (опять же), когда искал мой пример jsFiddle.

Если вы хотите использовать JQuery, чтобы отправить форму (и мы делаем) с помощью метода .submit(), то ни один элемент в вашей форме не может иметь name= или id= набор атрибутов для «представить». Кнопка INPUT имела и имя =иid = комплект для отправки; поэтому он не работал.

Ссылка: http://blog.sourcecoder.net/2009/10/jquery-submit-on-form-element-does-not-work/

См пересмотренный пример кода в jsFiddle:

Revised jsFiddle here

Пожалуйста, Пожалуйста, Пожалуйста, ознакомьтесь выше jsFiddle. Вы должны полностью сбрасывать плагин genvalidator. Если вы полностью поймете jsFiddle, вы станете новым программистом.

+0

Спасибо за подробный ответ. Я попробовал свой первый пример и приспособился к моему делу .. но проверка не кажется действенной: http://pastebin.aquilenet.fr/?6890f0495460d9b7#Fs9OEiKmG6NW/S4WIeAVULVJlMWjcNXqgrN7BtxEkGU= – MultiformeIngegno

+1

@MultiformeIngegno Пожалуйста, см. Мой ответ на в нижней части моего ответа выше. Это долгий ответ; пожалуйста, внимательно прочитайте. – gibberish

+0

Ничего себе, спасибо. Вы ставите много информации! :) – MultiformeIngegno

0

Если вы используете JQuery, попробуйте проверить этот путь:

function validate(form) { 
    if(!$('[name="agree"]').prop('checked')){ 
     alert("Please check the terms and conditions"); 
     return false; 
    } 
    return true; 
} 

или попробовать использовать

function validate(form) { 
    if(!$('[name="agree"]')[0].checked){ 
     alert("Please check the terms and conditions"); 
     return false; 
    } 
    return true; 
} 
+0

Я пробовал обе функции, но форма все еще проходит, если флажок не установлен. – MultiformeIngegno

+0

Как вы вызываете подтверждение и как вы отправляете форму? frmValidator обрабатывает представление после проверки, и если да, то у них есть обратный вызов, который вы можете использовать для отправки формы самостоятельно? – joe42

+0

'if (empty ($ name) || empty ($ visitor_email) || BLAHBLAH) \t { \t \t $ errors. =" \ N Обязательное поле "; \t} \t если (IsInjected ($ visitor_email)) \t { \t \t $ ошибки = "\ п формат электронной почты неправильно". \t} \t \t если (пусто ($ ошибок)) \t {.... функция Sendmail} ' – MultiformeIngegno

0

Поскольку вы добавили этот вопрос с JQuery, это должно работать для вас :

function validate(form) { 
    if ($("#agree :checked").length < 1) { 
     alert("Please check the terms and conditions"); 
     return false; 
    } 
    return true; 
} 

Я обычно использую этот подход, поскольку он также работает для нескольких флажков или групп переключателей в качестве Что ж. Обратите внимание, однако, что он не заботится о том, что было проверено, просто что-то было проверено. , , в случае одного флажка, это также действует как «обязательная проверка».

+0

форма все еще проходит, если флажок не установлен .. should't я тоже добавить что-то к типу = «отправить» входное событие onClick? – MultiformeIngegno

+0

Я обновил этот вопрос с более подробной – MultiformeIngegno

0

Это непроверенное, но я думаю, что это будет выглядеть примерно так:

function DoCustomValidation() { 
    var frm = document.forms["myform"]; 
    if(document.form1.agree.checked != true) { 
     sfm_show_error_msg('The Password and verified password does not match!',frm.pwd1); 
     return false; 
    }else{ 
     return true; 
    } 
} 

Заметьте, что вы должны настроить эту строку, чтобы иметь правильное название вашей собственной формы:

var frm = document.forms["myform"]; 

Кроме того, вам также необходимо связать функцию проверки с объектом валидатора:

frmvalidator.setAddnlValidationFunction("DoCustomValidation"); 

Источник: genvalidator documentation

+0

я попробовал ваш код, но genvalidator всплывающее окно появилось говорил мне: Передайте имя функции, как это: validator.setAddnlValidationFunction (DoCustomValidation) , а не передавая имя функции в виде строки я заменил frmvalidator с валидатор, но не работает ... форма также идет, если флажок не установлен. – MultiformeIngegno

+0

Вы пытались: 'frmvalidator.setAddnlValidationFunction (« DoCustomValidation »);'? * См. Ссылку в моем ответе на документацию genvalidator (источник). Вот где я получил синтаксис. * Не заменяйте 'frmvalidator'' validator' - в вашем опубликованном коде наверху вы используете 'frmvalidator', да? – gibberish

+0

Да, весь код, размещенный наверху Я использую frmvalidator. Когда я пытаюсь с frmvalidator, я получаю это сообщение об ошибке. Вы можете просмотреть форму в прямом эфире по адресу http://www.rendezvousroma.it/new/contatti.php (можно оставить несколько минут) – MultiformeIngegno

0

Добавить новый DIV для расположения ошибки выше вашего входного тега, как это:

<div name="formname_inputname_errorloc" class="errorstring"> 
//<your input tag goes here> 

Убедитесь, у вас в CSS для errorstring класс в файле CSS. и другие REQ JS файлы

Попробуйте искать демо для поколения валидатор был полностью объяснены в демо

0

frmvalidator.addValidation («согласен», «selmin = 1», «Пожалуйста, установите флажок») ;