每当文本字段为空时动态禁用按钮

IT技术 javascript html button
2021-03-04 06:55:21

这是我的代码:

<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/>

这有效但仍然没有效率,因为用户可以删除文本框内的文本并在按住 DELETE 键的同时单击按钮。有没有更有效的方法来使用 javascript 实现这一目标?

6个回答

最简单的方法:-

简单的 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 输入标签并尝试一下!快乐编码!

在单击按钮时添加检查以查看是否有任何文本。如果没有,弹出一个警告框(或其他形式的反馈)告诉用户输入数据,不要执行按钮功能。

例子:

<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>
+1 如果用户使用上下文菜单删除文本框值,这也有效。
2021-05-07 06:55:21

您可以轮询输入的值。这会降低效率和响应速度,但可能更可靠。

正如您所指出的,当输入的值被清除时,keyup 事件不一定会触发。如果他们用鼠标突出显示文本,右键单击并剪切怎么办?

change 事件可能会有所帮助,但它仍然不是那么可靠。它仅在模糊时触发,并且会错过一些更改(例如自动完成选择)。

这是一个演示轮询解决方案的 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>

注意:您需要使您的脚本网络可访问,以便浏览http://www.your-site.com/path/to/someScript.js访问脚本。

脚本标签位于正文的底部,因此页面首先加载实际内容,然后加载脚本。这意味着您的内容可以更快地对您的用户可见。


您应该对 jsFiddle 中的 JavaScript 进行最后一次修改。jsFiddle 有运行“onDomReady”的代码(见小提琴的左上角)。从技术上讲,如果您在内容之后拥有脚本,则无需执行此操作。它用于确保脚本在内容加载后运行,以便如果脚本尝试在 DOM 中查找元素,则它们已被加载并被找到。您可能应该将此添加到脚本中,以防(出于某种原因)您将脚本移动到内容之前。为了将您的脚本包装在 jQuery 中的 dom 就绪处理程序中,请执行以下操作:

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

在该示例中,//my code仅当页面准备就绪时,才会运行放置在注释位置的代码

抱歉,我还是初学者,但我应该把 javascript 代码放在哪里?我试图将它添加到脚本标签中,但它给了我错误
2021-05-09 06:55:21
您可能应该将它放在一个 JS 文件中,并将它包装在一个文档就绪处理程序中(这样它就不会在页面内容加载之前执行)。然后,在 HTML 文件中,添加一个带有 src 属性的脚本标记,该属性是 JS 文件的 URL。通常将此脚本标记放在页面底部,以便首先加载页面内容。我将用更全面的解释更新我的答案。
2021-05-17 06:55:21
 <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>

这对我有用。我希望它对其他人有用。当用户没有任何文本或删除文本时,我需要禁用该按钮。

$('#textarea').on('keypress keyup keydown', function () { 
  if ($('#textarea').val() == "" ) { 
    $('#savebtn').prop('disabled', true); 
  } 
  else {   
    $('#savebtn').prop('disabled', false); 
  } 
});

$('#textarea').on('keypress keyup keydown', function () { 
  if ($('#textarea').val() == "" ) { 
    $('#savebtn').prop('disabled', true); 
  } 
  else {   
    $('#savebtn').prop('disabled', false); 
  } 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<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/>