Отключить кнопку, когда текстовое поле динамически пусто - PullRequest
7 голосов
/ 15 августа 2011

Вот мой код:

<input type="text" onkeyup="if(this.value.length > 0) document.getElementById('start_button').disabled = false; else document.getElementById('start_button').disabled = true;"/>
<input type="button" value="Click to begin!" id="start_button" disabled/>

Это работает, но все еще неэффективно, поскольку пользователь может удалить текст внутри текстового поля и нажать кнопку, удерживая нажатой клавишу «УДАЛИТЬ». Есть ли более эффективный способ добиться этого с помощью JavaScript?

Ответы [ 5 ]

8 голосов
/ 15 августа 2011

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

Пример:

<input id="myText" type="text" onkeyup="stoppedTyping()">
<input type="button" value="Click to begin!" id="start_button" onclick="verify()" disabled/> 

<script type="text/javascript">
    function stoppedTyping(){
        if(this.value.length > 0) { 
            document.getElementById('start_button').disabled = false; 
        } else { 
            document.getElementById('start_button').disabled = true;
        }
    }
    function verify(){
        if myText is empty{
            alert "Put some text in there!"
            return
        }
        else{
            do button functionality
        }
    }
</script>
5 голосов
/ 02 мая 2018

Самый простой способ сделать это: -

Простой HTML и JavaScript: запустить фрагмент (всего 7 строк)

function success() {
	 if(document.getElementById("textsend").value==="") { 
            document.getElementById('button').disabled = true; 
        } else { 
            document.getElementById('button').disabled = false;
        }
    }
<textarea class="input" id="textsend" onkeyup="success()" name="demo" placeholder="Enter your Message..."></textarea>
<button type="submit" id="button" disabled>Send</button>

Я использовал textarea, но вы можете использовать любые html-теги ввода и попробовать! Удачного кодирования!

1 голос
/ 10 июля 2017
 <input type="number" id="abc" onkeyup="s()">
 <input type="submit" id="abc2" disabled >
<script type="text/javascript">
function s(){
var i=document.getElementById("abc");
if(i.value=="")
    {
    document.getElementById("abc2").disabled=true;
    }
else
    document.getElementById("abc2").disabled=false;}</script>
1 голос
/ 15 августа 2011

Вы можете опрашивать значение ввода. Это было бы менее эффективно и менее оперативно, но потенциально более надежно.

Как вы указали, событие keyup не обязательно сработает при очистке значения ввода. Что если они подсвечивают текст мышью, щелкают правой кнопкой мыши и обрезают?

Событие изменения может помочь, но оно все еще не настолько надежно. Он срабатывает только при размытии и пропускает некоторые изменения (например, выбор автозаполнения).

Вот jsFiddle , демонстрирующее решение для опроса.


В ответ на комментарий Eng.Fouad, вот как добавить JS:

Вы можете поместить его в тег скрипта, например так:

<script type="text/javascript">
    //my code
</script>

Это будет работать, но это будет означать, что браузер вашего пользователя не будет кэшировать JavaScript, то есть загрузка вашей страницы займет больше времени. Также лучше отделить ваши сценарии от вашего контента. Но если вы хотите быстрый и простой вариант, это следует сделать. Поместите это внизу своего тела и заверните его в обработчик dom ready (см. Нижнюю часть ответа).

В качестве более чистого варианта вы можете поместить его во внешний файл, например someScript.js, содержимым которого будет ваш JavaScript (без тегов скрипта). Затем вы ссылаетесь на этот скрипт из вашего HTML-файла:

<html>
    <head></head>
    <body>
        <!-- contents of page -->
        <script type="text/javascript" src="/path/to/someScript.js"></script>
    </body>
</html>

NB. Вам необходимо сделать ваш сценарий доступным через Интернет, чтобы при переходе к http://www.your-site.com/path/to/someScript.js доступ к сценарию.

Тег script находится внизу тела, поэтому сначала страница загружает реальное содержимое, а затем сценарии. Это будет означать, что ваш контент будет виден вашим пользователям раньше.


Вы должны сделать одну последнюю модификацию JavaScript в jsFiddle. В jsFiddle есть код, выполняющий «onDomReady» (см. Верхнюю левую часть скрипки). Технически, вам не нужно делать это, если у вас есть сценарий после содержимого. Он предназначен для того, чтобы скрипт запускался после загрузки содержимого, чтобы, если скрипт пытается найти элементы в DOM, они были загружены и найдены. Возможно, вам следует добавить это в сценарий на тот случай, если (по какой-то причине) вы переместите сценарий до содержимого. Чтобы обернуть ваш скрипт в обработчик dom ready в jQuery, сделайте следующее:

$(function(){
    //my code
});

В этом примере код, помещенный там, где комментарий //my code, будет выполняться только тогда, когда страница готова.

0 голосов
/ 09 января 2019

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

<head>
    <title>Testing...</title>
</head>

<body>
    <input id="myText" type="text"  onkeyup="btnActivation()">
    <input type="button" value="Click to begin!" id="start_button" disabled/> 

    <script type="text/javascript">


        function btnActivation(){

            if(!document.getElementById('myText').value.length){
                document.getElementById("start_button").disabled = true;            
            }else{
                document.getElementById("start_button").disabled = false;

            }           
        }   

    </script>
</body>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...