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

вопрос по JS

  • Malin-ka

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

    Spritz 23 июля 2009 г. 13: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('<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){
    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].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].alertTextCheckboxe+"<br />"
    }else{
    promptText += settings.allrules[rules].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
    }
    };
    };


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


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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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


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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Malin-ka, :)

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