Как я могу изменить параметр maxlength для проверки текстовой области с учетом только букв, а не пробелов?

#javascript #jquery #validation

#javascript #jquery #проверка

Вопрос:

Я использую jQuery для проверки формы, и мне нужно отобразить текстовую область с минимальной длиной 1 буквы и максимальной длиной 500 букв.

Как я могу изменить параметр maxlength для проверки текстовой области с учетом только букв, а не пробелов?

Спасибо

Комментарии:

1. Если вы хотите заблокировать пользователя после X букв, вы должны использовать keydown вместо keyup предложенных в ответах

2. Вам нужно создать свое собственное пользовательское правило

Ответ №1:

Вам нужно создать свое собственное пользовательское правило, см., Например:

 $.validator.addMethod('customLength', function (value, elm, param) {
    //Your Validation rule here    
    return elm.value.replace(/ /g,'').length <= 500; // return bool 
});


$(document).ready(function () {
    $("#form").validate({
        rules: {
            "name": {
                required: true,
                customLength: true
            }
        },
        messages: {
            "name": {
                required: "Please, enter a name",
                customLength: 'Custom error message!'
            }
        },
        submitHandler: function (form) { // for demo
            alert('valid form submitted'); // for demo
            return false; // for demo
        }
    });

});
  

Ответ №2:

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

  $(document).on('keyup','textarea',function(){
   if($(this).val() != ""){
     var textarea = $(this).val().replace(/ /g,'');
     var length = textarea.length;

     if(length > 500){
       alert('Limit reached');
     }
   }
});
  

Комментарии:

1. @Haryia что вы получаете на выходе? Какая-либо ошибка в консоли?

2. ошибок нет, но форма отправляется без учета элемента управления

Ответ №3:

  $(document).on('keyup','textarea',function(){
     var textarea = $(this).val().replace(/ /g,'');
     var newLength = textarea.length;
//set to new max length (basically 500   whitespaces' length)
 $(this).attr('maxlength',500  ($(this).val().length - newLength) );
});
  

Ответ №4:

Если вы используете jquery-validate то, что вы упомянули. Затем, пожалуйста, добавьте еще js один, additional-methods.min.js который имеет дополнительные возможности для обработки пользовательской логики

HTML-страница

 <html>
   <head>
        <script type="text/javascript" src="/js/jquery.js"></script>
        <script type="text/javascript" src="/js/jquery-validate.js"></script>
        <script type="text/javascript" src="/js/additional-methods.min.js"></script>
    </head>
    <body>
        <form id="formID" name="formID" method="post">
            <textarea id="textareaID" name="textareaID" ></textarea>
            <input id="submitBtn" type="submit">
        </form>

        <script>
            $(document).ready(function(){
                $("#formID").validate({
                    rules: {
                        textareaID:{
                            required:true,
                            checkLenght:true
                        }
                    },
                    messages: {
                        textareaID:{
                             required:'Please enter',
                             checkLenght:'msg..'
                        }
                    }
                });
            });

            $.validator.addMethod("checkLenght", function(value, element){ 
                var count = (value.match(/d/g) || []).length;

                if(count == 0 || count >500)
                    return false;
                else
                    return true;

                /*here is example regex you can write as per you requirement*/
            });
       </script>
    </body>
</html>
  

Для вашего дальнейшего уточнения: https://jqueryvalidation.org/jQuery.validator.addMethod /

Надеюсь, мое объяснение работает для вас.

Комментарии:

1. Я могу понять, но это не работает. Я использую этот код: $ j(‘#form-concorso’).validate({ правила: { textareaID:{ требуется: true, контрольная длина: true } }, сообщения: { textareaID: { требуется: ‘Пожалуйста, введите’, Контрольная длина: ‘msg ..’ } } }); и$.validator.addMethod(«Контрольная длина», функция (значение, элемент){ возвращает elm.value.replace(/ /g,»). длина <= 500; });

2. Код слишком длинный, поэтому я создаю jsfiddle: jsfiddle.net/haryia/rc8fka3h Спасибо!

3. пожалуйста, поместите вашу addMethod функцию вне ready события

4. ваш script код не соответствует тому, что вы сделали в скрипке

5. Я вывожу код из готовой функции, но ситуация не меняется:(