Этот сайт не наркоманов. Это сайт программистов.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 24 Май, 2012, 07:24:13

Страниц: [1]
Печать
Автор Тема: вопрос по JS  (Прочитано 847 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Malin-ka    ↓ 
24 Июль, 2009, 12:17:12
НЕ ХУЕТА! ХУЕТА!


Карма: 1
Сообщений: 83
Сила слова: 1.2

Всем снова привет !
 
Скатала вариант проверки полей на ява-скрипте:
Javascript
$(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('<div class="line10"></div><div class="line9"></div><div class="line8"></div><div class="line7"></div><div class="line6"></div><div class="line5"></div><div class="line4"></div><div class="line3"></div><div class="line2"></div><div class="line1"></div>')
        $(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("fast",0.8);
    };
    var updatePromptText = function(caller,promptText) {    // UPDATE TEXT ERROR IF AN ERROR IS ALREADY DISPLAYED
        updateThisPrompt =  $(caller).attr("name")
        $("."+updateThisPrompt).find(".formErrorContent").html(promptText)
       
        callerTopPosition  = $(caller).offset().top;
        inputHeight = $("."+updateThisPrompt).height()
       
        callerTopPosition = callerTopPosition  -inputHeight -10
        $("."+updateThisPrompt).animate({
            top:callerTopPosition
        });
    }
    var loadValidation = function(caller) {  // GET VALIDATIONS TO BE EXECUTED
       
        rulesParsing = $(caller).attr('class');
        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 ="" 
        var isError = false
        var prompt = $(caller).attr("name")
        var caller = caller
       
        for (i=0; i<rules.length;i++){
            switch (rules[i]){
            case "required":
                _required(caller,rules)
            break;
            case "custom":
                 _customRegex(caller,rules,i)
            break;
            case "length":
                 _length(caller,rules,i)
            break;
            case "minCheckbox":
                 _minCheckbox(caller,rules,i)
            break;
            case "confirm":
                 _confirm(caller,rules,i)
            break;
            default :;
            }
        }
        if (isError == true){
            ($("."+prompt).size() ==0) ? buildPrompt(caller,promptText) : updatePromptText(caller,promptText)
        }else{
            closePrompt(caller)
        }      
       
        /* VALIDATION FUNCTIONS */
        function _required(caller,rules){   // VALIDATE BLANK FIELD
            callerType = $(caller).attr("type")
           
            if (callerType == "text" || callerType == "password" || callerType == "textarea"){
               
                if(!$(caller).val()){
                    isError = true
                    promptText += settings.allrules[rules[i]].alertText+"<br />"
                }   
            }
            if (callerType == "radio" || callerType == "checkbox" ){
                callerName = $(caller).attr("name")
       
                if($("input[name="+callerName+"]:checked").size() == 0) {
                    isError = true
                    if($("input[name="+callerName+"]").size() ==1) {
                        promptText += settings.allrules[rules[i]].alertTextCheckboxe+"<br />"
                    }else{
                         promptText += settings.allrules[rules[i]].alertTextCheckboxMultiple+"<br />"
                    }   
                }
            }   
        }
        function _customRegex(caller,rules,position){       // VALIDATE REGEX RULES
            customRule = rules[position+1]
            pattern = eval(settings.allrules[customRule].regex)
           
            if(!pattern.test($(caller).attr('value'))){
                isError = true
                promptText += settings.allrules[customRule].alertText+"<br />"
            }
        }
        function _confirm(caller,rules,position){       // VALIDATE FIELD MATCH
            confirmField = rules[position+1]
           
            if($(caller).attr('value') != $("#"+confirmField).attr('value')){
                isError = true
                promptText += settings.allrules["confirm"].alertText+"<br />"
            }
        }
        function _length(caller,rules,position){    // VALIDATE LENGTH
       
            startLength = eval(rules[position+1])
            endLength = eval(rules[position+2])
            feildLength = $(caller).attr('value').length
 
            if(feildLength<startLength || feildLength>endLength){
                isError = true
                promptText += settings.allrules["length"].alertText+startLength+settings.allrules["length"].alertText2+endLength+settings.allrules["length"].alertText3+"<br />"
            }
        }
        function _minCheckbox(caller,rules,position){    // VALIDATE CHECKBOX NUMBER
       
            nbCheck = eval(rules[position+1])
            groupname = $(caller).attr("name")
            groupSize = $("input[name="+groupname+"]:checked").size()
           
            if(groupSize > nbCheck){   
                isError = true
                promptText += settings.allrules["minCheckbox"].alertText+"<br />"
            }
        }
        return(isError) ? isError : false;
    };
    var closePrompt = function(caller) {    // CLOSE PROMPT WHEN ERROR CORRECTED
        closingPrompt = $(caller).attr("name")
 
        $("."+closingPrompt).fadeTo("fast",0,function(){
            $("."+closingPrompt).remove()
        });
    };
    var submitValidation = function(caller) {   // FORM SUBMIT VALIDATION LOOPING INLINE VALIDATION
        var stopForm = false
        $(".formError").remove()
        var toValidateSize = $(caller).find("[class^=validate]").size()
       
        $(caller).find("[class^=validate]").each(function(){
            var validationPass = loadValidation(this)
            return(validationPass) ? stopForm = true : ""
        });
        if(stopForm){                     // GET IF THERE IS AN ERROR OR NOT FROM THIS VALIDATION FUNCTIONS
            destination = $(".formError:first").offset().top;
            $("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination}, 1100)
            return true;
        }else{
            return false
        }
    };
};

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

Подскажите пожалуйста, как сделать поле с такой проверкой НЕОБЯЗАТЕЛЬНЫМ ?
Если не пишу "required" - оно все равно обязательное...
 
...а в JS я пока ничего не понимаю.
Записан
adw0rd    ↓ 
24 Июль, 2009, 12:21:28 , спустя 4 минуты 16 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17615
Сила слова: 1.67

Вроде есть и нормальные плагины для jq
Спустя 1 минуту 8 секунд добавил
jquery validate
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
rider-sx    ↓ 
24 Июль, 2009, 02:57:04 , спустя 2 часа 35 минут 36 секунд
НЕ ХУЕТА! ХУЕТА!

drmmmmmm
Группа: Адекваты

Карма: 32
Сообщений: 2718
Сила слова: 1.18


Вроде есть и нормальные плагины для jq
Спустя 1 минуту 8 секунд добавил
jquery validate
+1
Записан

sap    ↓ 
24 Июль, 2009, 12:57:45 , спустя 10 часов 41 секунду
НЕ ХУЕТА! ХУЕТА!

Группа: Жмурики

Карма: 40
Сообщений: 2697
Сила слова: 1.48

Вроде есть отдельный раздел для JS.
Записан

adw0rd    ↓ 
24 Июль, 2009, 01:00:57 , спустя 3 минуты 12 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17615
Сила слова: 1.67


Вроде есть отдельный раздел для JS.
ага, перенес
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
Malin-ka    ↓ 
24 Июль, 2009, 03:54:47 , спустя 2 часа 53 минуты 50 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: 1
Сообщений: 83
Сила слова: 1.2

...а я потом еле нашла.
 
Но я посмотрела на предложенные плагины - а чем мой-то хуже ? или те чем лучше ?
И что, так оказалось трудно сделать поле необязательным, но с проверкой ?
Записан
adw0rd    ↓ 
24 Июль, 2009, 03:59:55 , спустя 5 минут 8 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17615
Сила слова: 1.67


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

1. Надо сразу писать в соответствующий подфорум
2. Смотреть новые ответы тут: http://pyha.ru/forum/unread
Спустя 1 минуту 12 секунд добавил

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

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

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
Malin-ka    ↓ 
24 Июль, 2009, 04:02:37 , спустя 2 минуты 42 секунды
НЕ ХУЕТА! ХУЕТА!


Карма: 1
Сообщений: 83
Сила слова: 1.2

ладно, спасибо и за сцылки.
Записан
adw0rd    ↓ 
24 Июль, 2009, 04:05:23 , спустя 2 минуты 46 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17615
Сила слова: 1.67

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

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
Malin-ka    ↓ 
24 Июль, 2009, 04:09:29 , спустя 4 минуты 6 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: 1
Сообщений: 83
Сила слова: 1.2

тут мне скорее предложили не бмв, а еще штук 50 кусков говна, из которых нужно самой выбрать бмв.
А чтобы выбирать, в них нужно хотябы разбираться. Похоже придется начать...
Записан
CTAPbIu_MABP    ↓ 
24 Июль, 2009, 04:13:57 , спустя 4 минуты 28 секунд
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

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

java.lang.OutOfMemoryError
Malin-ka    ↓ 
24 Июль, 2009, 04:17:03 , спустя 3 минуты 6 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: 1
Сообщений: 83
Сила слова: 1.2

МАВР, спасибо !
Записан
CTAPbIu_MABP    ↓ 
24 Июль, 2009, 04:18:47 , спустя 1 минуту 44 секунды
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

Malin-ka, :)
Записан

java.lang.OutOfMemoryError
Страниц: [1]
Печать
 

Перейти в: