Как объявлять функцию с jQuery?

У меня есть формуляр, где я пробую санкционировать RFC поставщика. Если поставщик - моральный человек, у него должно быть 12 символов, и если оно - физическое лицо, будь должен иметь 13.

я использую следующую функцию, чтобы санкционировать:

$(function ValidaRFC($rfc) {
        var strCorrecta;
        strCorrecta = $rfc;
        if ($("#TipoPersona :selected").text() == "Moral") {
            if ($($rfc).length == 12) {
                var valid = '^(([A-Z]|[a-z]){3})([0-9]{6})((([A-Z]|[a-z]|[0-9]){3}))';
            }
        }
        if ($("#TipoPersona :selected").text() == "Fisica") {
            if ($($rfc).length == 12) {
                var valid = '^(([A-Z]|[a-z]|\s){1})(([A-Z]|[a-z]){3})([0-9]{6})((([A-Z]|[a-z]|[0-9]){3}))';
            }

        }
        var validRfc = new RegExp(valid);
        var matchArray = strCorrecta.match(validRfc);
        if (matchArray == null) {
            alert('el rfc es incorrecto');

            return false;
        }
    });

но оно ни за чем не последует, хотя он поместит более 12 или 13 символов, позволяет мне сохранять поставщик.

в неударе в лунку rfc я использую один onblur = "ValidaRFC(this.value)"

1
задан 16.02.2017, 04:03
1 ответ

Проблема не в RegExp, а в $(function(){ ... }): согласно документации jQuery выражение $(function(){ ... }) он эквивалентный:

$(document).ready(function(){ ... })

То, что значит, что ты не определяешь функцию ValidaRFC, а выполняя ее, когда документ будучи загружен. Так, когда взрывается событие blurящика текста, не работает твоя функция (потому что она неопределенная).

Решение: (Изданный)

function ValidaRFC($rfc) { //Quité el '$(' de aquí...
    var strCorrecta;
    strCorrecta = $rfc;
    var longitudCorrecta = false;
    var valid;

    if ($("#TipoPersona :selected").text() == "Moral") {
        longitudCorrecta = (strCorrecta.length === 12);
        valid = '^(([A-Z]|[a-z]){3})([0-9]{6})((([A-Z]|[a-z]|[0-9]){3}))';          
    }
    if ($("#TipoPersona :selected").text() == "Fisica") {
        longitudCorrecta = (strCorrecta.length === 13);
        valid = '^(([A-Z]|[a-z]|\s){1})(([A-Z]|[a-z]){3})([0-9]{6})((([A-Z]|[a-z]|[0-9]){3}))';            
    }
    if(!longitudCorrecta){
        alert('el rfc es incorrecto');
        return false;
    }
    var validRfc = new RegExp(valid);
    var matchArray = strCorrecta.match(validRfc);
    if (matchArray == null) {
        alert('el rfc es incorrecto');

        return false;
    }
}; //...y el paréntesis de cierre aquí

Так, в событии blur ящика текста взорвется функция, как ты ждал.

2
ответ дан 24.11.2019, 13:39
  • 1
    Спасибо! функционируй, но, как кажется, он не принимает во внимание ($rfc).length == 12, потому что я ввожу более 12 символов, и сохраняет. Например " mnvc123456mnvbcsd" и сохраняй, но отметка rfc неправильная, если я вхожу " 1234nfmdj231msdkfs" я думаю, что он имеет общее с var valid, не s и # 233; если я объясняюсь. – Akiva 13.08.2016, 03:28
  • 2
    (c и # 243; я говорю изданный): проверяя спокойно я вижу несколько деталей, главный - что est и # 225; s объявляя valid только, если длина правильна (и если она неправильная, создается RegExp vac и # 237; o). Другой с $($rfc).length ты измеряешь длину array jQuery, который содержит цепь, вместо длины самой цепи. – Roimer 13.08.2016, 03:42
  • 3
    Большое спасибо:3 уже я сделал доказательства и я функционирую правильно! – Akiva 13.08.2016, 04:44

Теги

Похожие вопросы