【问题标题】:Disable button whenever a text field is empty dynamically每当文本字段为空时动态禁用按钮
【发布时间】:2011-10-27 09:02:13
【问题描述】:

这是我的代码:

<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 实现这一点?

【问题讨论】:

    标签: javascript html button


    【解决方案1】:

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

    例子:

    <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 如果用户使用上下文菜单删除文本框的值,这也有效。
    【解决方案2】:

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

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

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

    这是a jsFiddle 演示轮询解决方案。


    针对 Eng.Fouad 的评论,以下是添加 JS 的方法:

    你可以把它放在一个脚本标签中,像这样:

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

    这会起作用,但这意味着您用户的浏览器不会缓存 JavaScript,这意味着加载您的页面需要更长的时间。将脚本与内容分开也更干净。但是,如果您想要一个快速简便的选择,这应该可以。把它放在你身体的底部,并将它包裹在一个 dom 就绪的处理程序中(见答案的底部)。

    作为更简洁的选项,您可以将其放在外部文件中,例如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代码放在哪里?我试图将它添加到脚本标签中,但它给了我错误
    • 你可能应该把它放在一个 JS 文件中,并将它包装在一个文档就绪处理程序中(这样它就不会在页面内容加载之前执行)。然后,在 HTML 文件中,添加一个带有 src 属性的 script 标签,该属性是 JS 文件的 URL。通常将此脚本标记放在页面底部,以便首先加载页面的内容。我会用更完整的解释更新我的答案。
    【解决方案3】:
     <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>
    

    【讨论】:

      【解决方案4】:

      最简单的方法:-

      简单的 Html 和 JavaScript:运行 sn-p(只需 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输入标签试试看! 编码愉快!

      【讨论】:

        【解决方案5】:

        这里的按钮默认是禁用的,当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>
        

        【讨论】:

          【解决方案6】:

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

          $('#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/>

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-05-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多