2013-11-09 8 views
0

Можете ли вы помочь мне очистить this код какВыпуск на Объединение двух функций в JQuery

В идеале, я хотел бы, чтобы создать функцию validateEmail() с параметром (email) и просто вызовите функцию по форме представления, некоторые вещи, как это

function validateEmail(email){ 
    // code 
} 

// Call function on form submission 
$('#myform').submit(function() { 
    validateEmail($("#txtEmail").val()); 
}) 

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

$(document).ready(function() { 
function ValidateEmail(email) { 
     var expr = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; 
     return expr.test(email); 
    }; 

$('#myform').submit(function() { 
var abort = false; 
     if (!ValidateEmail($("#txtEmail").val())) { 
      $(this).parent().after('<div class="err"> Valid Email Adress Requierd</div>'); 
      abort = true; 
     } 
    if (abort) { return false; } else { return true; } 
    })//on submit 
}); // ready 

Here is a working example of the Form

+0

Непонятно, какую проблему вы пытаетесь решить. Форма validate принадлежит методу submit. Если у вас есть несколько проверок проверки, вы помещаете каждый из них в метод отправки один за другим. – jfriend00

+0

, что я до сих пор не хочу делать! Я хочу сохранить валидаторы в разных функциях и просто вызвать их .submit() – Behseini

+0

[Не изобретать велосипед] (https://github.com/jzaefferer/jquery-validation). – moonwave99

ответ

1
$(document).ready(function() { 
    function ValidateEmail(obj, email) { 
     var expr = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; 
     var testedEmail = expr.test(email); 

     var abort = false; 
     if (!testedEmail) { 
      $(obj).parent().after('<div class="err"> Valid Email Adress Requierd</div>'); 
      abort = true; 
     } 

      if (abort) { return false; } else { return true; }  
    } 

    $('#myform').submit(function() { 
     return ValidateEmail(this, $("#txtEmail").val()) 
    }); 

}); // ready 

Здесь my demo.

+0

спасибо mucio, это именно то, что я искал только в том случае, можете ли вы сообщить мне, что такое obj и почему вы его использовали? – Behseini

+0

obj - это первый параметр ValidateEmail, и я использовал его для передачи подтверждения на #myform, который вызывает его и передает себя (это). Я не эксперт js, поэтому, возможно, стандартный способ вызова объекта dom, вызывающего функцию, отличается. – mucio

0

Попробуйте это:

var __REGEXINT__ = '__REGEXINT__', 

var __REGEXCEP__ = '__REGEXCEP__'; 

var __REGEXMAIL__ = '__REGEXMAIL__'; 

var validator = { 

    _targetErrors : '#sectionErrors', 

    setError: function(msg){ 

     var message = '<p>{message}</p>'.replace('{message}', msg); 

     $(this._targetErrors).append(message) 
    }, 

    __renderInputs : function(__inputs__){ 


     function __getValueOfTarget(target, delimitator){ 

      if(!target) 
       return false; 

      if(typeof target == "string") 

       return $(target).val(); 

      else if(typeof target == "object"){ 

       var _return_ = []; 

       if(!delimitator) 
        delimitator = ''; 

       for(var id in target) 
        _return_.push(__getValueOfTarget(target[id])); 


       return _return_.join(delimitator); 
      } 

      return false; 
     } 

     var __return__ = {}; 
     var __error__ = false; 

     for(name in __inputs__){ 

      var input = __inputs__[name]; 
      var value = __return__[name] = __getValueOfTarget(input.target, input.delimitator); 
      var foundError = false; 
      if(!input.validator){ 

       __return__[name] = value; 
       continue; 

      } else { 

       for(var validatorID in input.validator){ 

        if(foundError) 
         continue; 

        switch(input.validator[validatorID]){ 

         case 'empty': 
          if(value == ""){ 
           __error__ = foundError = true; 
           this.setError(input.validator_error[ validatorID ]); 
           continue; 
          } 
         break; 

         case __REGEXINT__: 
          if(!/^(\d+)$/.test(value)){ 
           __error__ = foundError = true; 
           this.setError(input.validator_error[ validatorID ]); 
           continue; 
          } 
         break; 

         case __REGEXCEP__: 
          if(!/^(\d{5}\-\d{3})$/.test(value)){ 
           __error__ = foundError = true; 
           this.setError(input.validator_error[ validatorID ]); 
           continue; 
          } 
         break; 

         case __REGEXCEP__: 
          if(!/^(\d{5}\-\d{3})$/.test(value)){ 
           __error__ = foundError = true; 
           this.setError(input.validator_error[ validatorID ]); 
           continue; 
          } 
         break; 

         case __REGEXMAIL__: 
          if(!/^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/.test(value)){ 
           __error__ = foundError = true; 
           this.setError(input.validator_error[ validatorID ]); 
           continue; 
          } 
         break; 
        } 
       } 
      } 
     } 

     return (__error__) ? false : __return__ 
    } 
} 

var __inputs__ = { 

    id:{ 
     target:"#id_terminal", 
     validator:["empty", __REGEXINT__ ], 
     validator_error:[ 
      "Por favor insira a ID do terminal.", 
      "Por favor insira uma ID valida." 
     ] 
    }, 

    name:{ 
     target:"#name", 
     validator:["empty"], 
     validator_error:["Por favor insira o nome do estabelecimento."] 
    }, 

    uf:{ 
     target:"#uf", 
     validator:["empty"], 
     validator_error:["Por favor insira o estado."] 
    }, 

    mail:{ 
     target:"#mail", 
     validator:["empty", __REGEXMAIL__], 
     validator_error:["Por favor insira um e-mail.", "Por favor insira um e-mail valido"] 
    }, 

    cep:{ 
     target:[".cep", ".cep2"], 
     delimitator:'-', 
     validator:["empty", __REGEXCEP__ ], 
     validator_error:[ 
      "Por favor insira o cep.", 
      "Por favor insira um cep valido." 
     ] 
    } 
} 

$('#myform').submit(function() { 
    if(!validator.__renderInputs(__inputs__)) 
     return false; 
}); 
+0

Привет, Гильерме, Спасибо за комментарий, но это точно противоположно! Я думал, чтобы все было вне функции отправки, так как я собираюсь добавить там еще правила проверки! – Behseini

+0

kk okay Я думаю в другом методе, который поможет вам. Я думаю, что у меня есть код для этого. –

+0

Пожалуйста, проверьте мои обновления, как это можно использовать с несколькими валидаторами. Извините за сообщение об ошибке в португальском .. –

Смежные вопросы