Как проверить длину текстовой области

0

Я пытаюсь вычислить, если textarea имеет длину больше нуля, а затем запустить кусок кода. Я не могу заставить это работать по какой-то причине. Я был бы признателен за помощь.

Вот мой код:

Javascript (включая jQuery):

$(document).ready(function () {
    if ($('.comments').val().length > 0) {
        $('form').attr('action', '?Email');
    }
});

HTML:

<form action="?AddToQuote" method="POST">
    <textarea name="comments" class="comments"></textarea>
    <input type="submit" value="submit" />
</form>

Я пробовал много разных Javascript, ни один из них не работает. Выполняется ли оператор Javascript if после загрузки страницы HTML? Я уверен, что строка внутри оператора if работает без инструкции if, я ее уже протестировал.

  • 2
    хорошо, он запускается, когда документ готов, так как вы не вводите текст в текстовое поле до тех пор, пока не загрузится dom, код выполняется до того, как появится какой-либо текст
  • 0
    вместо этого сделайте это в функции отправки формы
Теги:
javascript-events
dom-events

5 ответов

3
Лучший ответ

Вы должны выполнять эту строку каждый раз, когда содержимое textarea обновляется. Таким образом, вам нужно настроить логику в событии готовности DOM, но оценить условие для каждого изменения содержимого в области textarea:

$( document ).ready( function() {

    var $comment = $('.comments');
    $comment.on( 'change', function( event ) {

        if( $('.comments').val().length > 0 ) {
            $( 'form' ).attr( 'action', '?Email' );
            $comment.off( 'change' );
        }

    } );

} );

Как было предложено @destroydaworld, вы также можете использовать событие keyup если действительно необходимо, чтобы проверка проверялась после каждого отдельного символа, введенного с помощью используемого. Обычно это используется в сочетании с подсчетом символов. Но в вашем случае - когда вы пытаетесь добавить некоторый параметр URL-адреса, я думаю, что достаточно прослушать событие change.

  • 0
    сколько раз вы хотели бы добавить «? Email», потому что это добавит его довольно много раз
  • 0
    Это сработало отлично! Большое спасибо за помощь!
Показать ещё 4 комментария
1

Оператор if будет выполнен, когда DOM готов, то есть когда ваша страница полностью загружена. Конечно, на этом этапе ваше текстовое поле пусто. Поэтому ваше утверждение if никогда не будет правдой. Вы должны добавить прослушиватель событий в текстовое поле:

$('.comments').on('keyup', function() {
     // Do your IF statement here
});
  • 0
    нет, это добавит '? email' к форме слишком много раз
1

Сделайте это на форме отправки формы. Таким образом, он будет проверять только один раз.

$('form').submit(function(){
  if( $('.comments').val() ) {
    $('form').attr('action', '?Email');
   } 
});

или мне нравится добавлять скрытый ввод:

$('form').append('<input type="hidden" name="email" value="1">');

или вы можете просто проверить на стороне сервера, если есть комментарии к электронной почте.

0

Хорошо, вы можете попробовать следующий код. Надеюсь, это поможет вам. Я написал код в JS. Вам нужно вызвать функцию при загрузке страницы. Надеюсь это поможет!

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
window.onload = function display()
{
var txt = document.getElementById("myarea").value;
var len = txt.length;
if (len > 0){
    document.write("Sucess"); // if len > 0 do some action
}
else
    document.write(txt); //else condition
}
</script>
</head>
<body>
<textarea id="myarea" rows="4" cols="25">
Hello! How are you??
</textarea>
</body>
</html>
0

Вы пробовали это? http://www.jqeasy.com/jquery-character-counter/

Кроме того, вы пытались называть свою форму с помощью идентификатора вместо этого ("форма")?

$('#theformid').attr('action', '?Email');
  • 0
    Я попробовал это, это все еще не работало. Как я уже говорил в посте, я знаю, что строка работает, но не оператор if. В любом случае спасибо! :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню