Подтвердить что ты не робот

Если поле ввода пуст, отключите кнопку отправки

Я пытаюсь отключить кнопку отправки, если пользователь не предоставил никакого текста.

На первый взгляд выглядит, что все работает нормально, но если пользователь набирает текст, а затем удаляет его, кнопка отправки становится доступной.

Вот мой код:

$(document).ready(function(){
    $('.sendButton').attr('disabled',true);
    $('#message').keyup(function(){
        if($(this).val.length !=0){
            $('.sendButton').attr('disabled', false);
        }
    })
});
4b9b3361

Ответ 1

Вы отключитесь только на document.ready, и это происходит только один раз, когда DOM готов, но вам нужно disable в событии keyup, когда текстовое поле пуст. Также измените $(this).val.length на $(this).val().length

$(document).ready(function(){
    $('.sendButton').attr('disabled',true);
    $('#message').keyup(function(){
        if($(this).val().length !=0)
            $('.sendButton').attr('disabled', false);            
        else
            $('.sendButton').attr('disabled',true);
    })
});

Или вы можете использовать условный оператор вместо оператора if. также используйте prop вместо attr, поскольку атрибут рекомендованный jQuery 1.6 и выше для отключенных, отмеченных и т.д.

Как и в jQuery 1.6, метод .attr() возвращает undefined для атрибутов которые не были установлены. Извлечение и изменение свойств DOM, таких как проверенное, выбранное или отключенное состояние элементов формы, используйте .prop(), jQuery docs

$(document).ready(function(){
    $('.sendButton').prop('disabled',true);
    $('#message').keyup(function(){
        $('.sendButton').prop('disabled', this.value == "" ? true : false);     
    })
});  

Ответ 2

Попробуйте этот код

$(document).ready(function(){
    $('.sendButton').attr('disabled',true);

    $('#message').keyup(function(){
        if($(this).val().length !=0){
            $('.sendButton').attr('disabled', false);
        }
        else
        {
            $('.sendButton').attr('disabled', true);        
        }
    })
});

Отметьте демонстрационный скрипт

Вам не хватает другой части инструкции if (чтобы снова отключить кнопку, если текстовое поле пуст) и круглые скобки () после val в if($(this).val.length !=0){

Ответ 3

Простой способ сделать:

function toggleButton(ref,bttnID){
    document.getElementById(bttnID).disabled= ((ref.value !== ref.defaultValue) ? false : true);
}


<input ... onkeyup="toggleButton(this,'bttnsubmit');">
<input ... disabled='disabled' id='bttnsubmit' ... >

Ответ 4

Пожалуйста, попробуйте

<!DOCTYPE html>
<html>
  <head>
    <title>Jquery</title>
    <meta charset="utf-8">       
    <script src='http://code.jquery.com/jquery-1.7.1.min.js'></script>
  </head>

  <body>

    <input type="text" id="message" value="" />
    <input type="button" id="sendButton" value="Send">

    <script>
    $(document).ready(function(){  

      var checkField;

      //checking the length of the value of message and assigning to a variable(checkField) on load
      checkField = $("input#message").val().length;  

      var enableDisableButton = function(){         
        if(checkField > 0){
          $('#sendButton').removeAttr("disabled");
        } 
        else {
          $('#sendButton').attr("disabled","disabled");
        }
      }        

      //calling enableDisableButton() function on load
      enableDisableButton();            

      $('input#message').keyup(function(){ 
        //checking the length of the value of message and assigning to the variable(checkField) on keyup
        checkField = $("input#message").val().length;
        //calling enableDisableButton() function on keyup
        enableDisableButton();
      });
    });
    </script>
  </body>
</html>

Ответ 5

Для тех, кто использует coffeescript, я поместил код, который мы используем глобально, чтобы отключить кнопки отправки в нашей наиболее широко используемой форме. Адаптация ответа Адиль выше.

$('#new_post button').prop 'disabled', true
$('#new_post #post_message').keyup ->
    $('#new_post button').prop 'disabled', if @value == '' then true else false
    return