ФорумПрограммированиеJavaScript → вопрос по JS

вопрос по JS

  • Malin-ka

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

    Spritz 23 июля 2009 г. 16:17

    Всем снова привет !

    Скатала вариант проверки полей на ява-скрипте:
    $(document).ready(function() {

    // SUCCESS AJAX CALL, replace "success: false," by: success : function() { callSuccessFunction() },
    $("[class^=validate]").validationEngine({
    success : false,
    failure : function() {}
    })
    });

    jQuery.fn.validationEngine = function(settings) {
    if($.validationEngineLanguage){ // IS THERE A LANGUAGE LOCALISATION ?
    allRules = $.validationEngineLanguage.allRules
    }else{
    allRules = {"required":{ // Add your regex rules here, you can take telephone as an example
    "regex":"none",
    "alertText":"Поле обязательно!",
    "alertTextCheckboxMultiple":"* Пожалуйста, выберите опцию",
    "alertTextCheckboxe":"* Опция не выбрана"},
    "length":{
    "regex":"Нет",
    "alertText":"от ",
    "alertText2":" до ",
    "alertText3": " символов"},
    "minCheckbox":{
    "regex":"none",
    "alertText":"Выбрано слишком много!"},
    "confirm":{
    "regex":"none",
    "alertText":"Поля не совпадают!"},
    "telephone":{
    "regex":"/^[0-9\-\(\)]+$/",
    "alertText":"Неправильный формат"},
    "email":{
    "regex":"/^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/",
    "alertText":"Только формат e-mail"},
    "onlyNumber":{
    "regex":"/^[0-9]+$/",
    "alertText":"Только цифры"},
    "noSpecialCaracters":{
    "regex":"/^[0-9a-zA-Zа-яА-Я]+$/",
    "alertText":"Только цифры и буквы"},
    "onlyLetter":{
    "regex":"/^[0-9a-zA-Z]+$/",
    "alertText":"Только цифры и лат.буквы"}
    }
    }

    settings = jQuery.extend({
    allrules:allRules,
    success : false,
    failure : function() {}
    }, settings);


    $("form").bind("submit", function(caller){ // ON FORM SUBMIT, CONTROL AJAX FUNCTION IF SPECIFIED ON DOCUMENT READY
    if(submitValidation(this) == false){
    if (settings.success){
    settings.success && settings.success();
    return false;
    }
    }else{
    settings.failure && settings.failure();
    return false;
    }
    })
    $(this).not("[type=checkbox]").bind("blur", function(caller){loadValidation(this)})
    $(this+"[type=checkbox]").bind("click", function(caller){loadValidation(this)})

    var buildPrompt = function(caller,promptText) { // ERROR PROMPT CREATION AND DISPLAY WHEN AN ERROR OCCUR
    var divFormError = document.createElement('div')
    var formErrorContent = document.createElement('div')
    var arrow = document.createElement('div')


    $(divFormError).addClass("formError")
    $(divFormError).addClass($(caller).attr("name"))
    $(formErrorContent).addClass("formErrorContent")
    $(arrow).addClass("formErrorArrow")

    $("body").append(divFormError)
    $(divFormError).append(arrow)
    $(divFormError).append(formErrorContent)
    $(arrow).html(&#39;<div class=&quot;line10&quot;></div><div class=&quot;line9&quot;></div><div class=&quot;line8&quot;></div><div class=&quot;line7&quot;></div><div class=&quot;line6&quot;></div><div class=&quot;line5&quot;></div><div class=&quot;line4&quot;></div><div class=&quot;line3&quot;></div><div class=&quot;line2&quot;></div><div class=&quot;line1&quot;></div>&#39;)
    $(formErrorContent).html(promptText)

    callerTopPosition = $(caller).offset().top;
    callerleftPosition = $(caller).offset().left;
    callerWidth = $(caller).width()
    callerHeight = $(caller).height()
    inputHeight = $(divFormError).height()

    callerleftPosition = callerleftPosition + callerWidth -30
    callerTopPosition = callerTopPosition -inputHeight -10

    $(divFormError).css({
    top:callerTopPosition,
    left:callerleftPosition,
    opacity:0
    })
    $(divFormError).fadeTo(&quot;fast&quot;,0.8);
    };
    var updatePromptText = function(caller,promptText) { // UPDATE TEXT ERROR IF AN ERROR IS ALREADY DISPLAYED
    updateThisPrompt = $(caller).attr(&quot;name&quot;)
    $(&quot;.&quot;+updateThisPrompt).find(&quot;.formErrorContent&quot;).html(promptText)

    callerTopPosition = $(caller).offset().top;
    inputHeight = $(&quot;.&quot;+updateThisPrompt).height()

    callerTopPosition = callerTopPosition -inputHeight -10
    $(&quot;.&quot;+updateThisPrompt).animate({
    top:callerTopPosition
    });
    }
    var loadValidation = function(caller) { // GET VALIDATIONS TO BE EXECUTED

    rulesParsing = $(caller).attr(&#39;class&#39;);
    rulesRegExp = /\[(.*)\]/;
    getRules = rulesRegExp.exec(rulesParsing);
    str = getRules[1]
    pattern = /\W+/;
    result= str.split(pattern);

    var validateCalll = validateCall(caller,result)
    return validateCalll

    };
    var validateCall = function(caller,rules) { // EXECUTE VALIDATION REQUIRED BY THE USER FOR THIS FILED
    var promptText =&quot;&quot;
    var isError = false
    var prompt = $(caller).attr(&quot;name&quot;)
    var caller = caller

    for (i=0; i<rules.length;i++){
    switch (rules){
    case &quot;required&quot;:
    _required(caller,rules)
    break;
    case &quot;custom&quot;:
    _customRegex(caller,rules,i)
    break;
    case &quot;length&quot;:
    _length(caller,rules,i)
    break;
    case &quot;minCheckbox&quot;:
    _minCheckbox(caller,rules,i)
    break;
    case &quot;confirm&quot;:
    _confirm(caller,rules,i)
    break;
    default :;
    }
    }
    if (isError == true){
    ($(&quot;.&quot;+prompt).size() ==0) ? buildPrompt(caller,promptText) : updatePromptText(caller,promptText)
    }else{
    closePrompt(caller)
    }

    /* VALIDATION FUNCTIONS */
    function _required(caller,rules){ // VALIDATE BLANK FIELD
    callerType = $(caller).attr(&quot;type&quot;)

    if (callerType == &quot;text&quot; || callerType == &quot;password&quot; || callerType == &quot;textarea&quot;){

    if(!$(caller).val()){
    isError = true
    promptText += settings.allrules[rules].alertText+&quot;<br />&quot;
    }
    }
    if (callerType == &quot;radio&quot; || callerType == &quot;checkbox&quot; ){
    callerName = $(caller).attr(&quot;name&quot;)

    if($(&quot;input[name=&quot;+callerName+&quot;]:checked&quot;).size() == 0) {
    isError = true
    if($(&quot;input[name=&quot;+callerName+&quot;]&quot;).size() ==1) {
    promptText += settings.allrules[rules].alertTextCheckboxe+&quot;<br />&quot;
    }else{
    promptText += settings.allrules[rules].alertTextCheckboxMultiple+&quot;<br />&quot;
    }
    }
    }
    }
    function _customRegex(caller,rules,position){ // VALIDATE REGEX RULES
    customRule = rules[position+1]
    pattern = eval(settings.allrules[customRule].regex)

    if(!pattern.test($(caller).attr(&#39;value&#39;))){
    isError = true
    promptText += settings.allrules[customRule].alertText+&quot;<br />&quot;
    }
    }
    function _confirm(caller,rules,position){ // VALIDATE FIELD MATCH
    confirmField = rules[position+1]

    if($(caller).attr(&#39;value&#39;) != $(&quot;#&quot;+confirmField).attr(&#39;value&#39;)){
    isError = true
    promptText += settings.allrules[&quot;confirm&quot;].alertText+&quot;<br />&quot;
    }
    }
    function _length(caller,rules,position){ // VALIDATE LENGTH

    startLength = eval(rules[position+1])
    endLength = eval(rules[position+2])
    feildLength = $(caller).attr(&#39;value&#39;).length

    if(feildLength<startLength || feildLength>endLength){
    isError = true
    promptText += settings.allrules[&quot;length&quot;].alertText+startLength+settings.allrules[&quot;length&quot;].alertText2+endLength+settings.allrules[&quot;length&quot;].alertText3+&quot;<br />&quot;
    }
    }
    function _minCheckbox(caller,rules,position){ // VALIDATE CHECKBOX NUMBER

    nbCheck = eval(rules[position+1])
    groupname = $(caller).attr(&quot;name&quot;)
    groupSize = $(&quot;input[name=&quot;+groupname+&quot;]:checked&quot;).size()

    if(groupSize > nbCheck){
    isError = true
    promptText += settings.allrules[&quot;minCheckbox&quot;].alertText+&quot;<br />&quot;
    }
    }
    return(isError) ? isError : false;
    };
    var closePrompt = function(caller) { // CLOSE PROMPT WHEN ERROR CORRECTED
    closingPrompt = $(caller).attr(&quot;name&quot;)

    $(&quot;.&quot;+closingPrompt).fadeTo(&quot;fast&quot;,0,function(){
    $(&quot;.&quot;+closingPrompt).remove()
    });
    };
    var submitValidation = function(caller) { // FORM SUBMIT VALIDATION LOOPING INLINE VALIDATION
    var stopForm = false
    $(&quot;.formError&quot;).remove()
    var toValidateSize = $(caller).find(&quot;[class^=validate]&quot;).size()

    $(caller).find(&quot;[class^=validate]&quot;).each(function(){
    var validationPass = loadValidation(this)
    return(validationPass) ? stopForm = true : &quot;&quot;;
    });
    if(stopForm){ // GET IF THERE IS AN ERROR OR NOT FROM THIS VALIDATION FUNCTIONS
    destination = $(&quot;.formError:first&quot;).offset().top;
    $(&quot;html:not(:animated),body:not(:animated)&quot;).animate({ scrollTop: destination}, 1100)
    return true;
    }else{
    return false
    }
    };
    };


    пример :
    <input class=&quot;validate[required,custom[email]] text-input&quot; name=&quot;email&quot; id=&quot;email&quot; />


    Подскажите пожалуйста, как сделать поле с такой проверкой НЕОБЯЗАТЕЛЬНЫМ ?
    Если не пишу &quot;required&quot; - оно все равно обязательное…

    …а в JS я пока ничего не понимаю.
  • adw0rd

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

    Spritz 23 июля 2009 г. 16:21, спустя 4 минуты 16 секунд

    Вроде есть и нормальные плагины для jq {+++68+++} jquery validate
    adw/0
  • rider-sx

    Сообщения: 2717 Репутация: N Группа: Адекваты

    Spritz 23 июля 2009 г. 18:57, спустя 2 часа 35 минут 36 секунд


    Вроде есть и нормальные плагины для jq {+++68+++} jquery validate
    +1
  • sap

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

    Spritz 24 июля 2009 г. 4:57, спустя 10 часов 41 секунду

    Вроде есть отдельный раздел для JS.
  • adw0rd

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

    Spritz 24 июля 2009 г. 5:00, спустя 3 минуты 12 секунд


    Вроде есть отдельный раздел для JS.
    ага, перенес
    adw/0
  • Malin-ka

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

    Spritz 24 июля 2009 г. 7:54, спустя 2 часа 53 минуты 50 секунд

    …а я потом еле нашла.

    Но я посмотрела на предложенные плагины - а чем мой-то хуже ? или те чем лучше ?
    И что, так оказалось трудно сделать поле необязательным, но с проверкой ?
  • adw0rd

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

    Spritz 24 июля 2009 г. 7:59, спустя 5 минут 8 секунд


    …а я потом еле нашла.


    1. Надо сразу писать в соответствующий подфорум
    2. Смотреть новые ответы тут: http://pyha.ru/forum/unread {+++72+++}

    Но я посмотрела на предложенные плагины - а чем мой-то хуже ? или те чем лучше ?

    тем что ты не можешь с ним работать нормально


    И что, так оказалось трудно сделать поле необязательным, но с проверкой ?

    в куче кода добавлять свои правки - много времени на ненужные действия
    adw/0
  • Malin-ka

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

    Spritz 24 июля 2009 г. 8:02, спустя 2 минуты 42 секунды

    ладно, спасибо и за сцылки.
  • adw0rd

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

    Spritz 24 июля 2009 г. 8:05, спустя 2 минуты 46 секунд

    Malin-ka, не надо обижаться, понимаешь все как выглядит:
    ты приезжаешь на сломанном форде, просишь тебе его починить и улучшить. Тебе предлагают не париться с этим куском говна и дать в подарок бмв…
    adw/0
  • Malin-ka

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

    Spritz 24 июля 2009 г. 8:09, спустя 4 минуты 6 секунд

    тут мне скорее предложили не бмв, а еще штук 50 кусков говна, из которых нужно самой выбрать бмв.
    А чтобы выбирать, в них нужно хотябы разбираться. Похоже придется начать…
  • Trej Gun

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

    Spritz 24 июля 2009 г. 8:13, спустя 4 минуты 28 секунд

    Malin-ka, на вот почитай http://www.linkexchanger.su/2008/46.html
  • Malin-ka

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

    Spritz 24 июля 2009 г. 8:17, спустя 3 минуты 6 секунд

    МАВР, спасибо !
  • Trej Gun

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

    Spritz 24 июля 2009 г. 8:18, спустя 1 минуту 44 секунды

    Malin-ka, :)

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