【问题标题】:javascript doesn't immediately enable my buttonjavascript 不会立即启用我的按钮
【发布时间】:2014-08-04 07:32:17
【问题描述】:

我使用 VS2010,C# 进行 ASP.NET 开发,我编写了一个小的 Javascript 函数,该函数仅在用户在文本框中输入短语后才启用最初禁用的按钮(此文本框不应为空),它可以工作很好,但有一个小问题,当用户键入单词时,按钮并没有完全启用,他应该按 Tab 或单击屏幕以便启用按钮!这是我的 JS 函数:

       <script type="text/javascript" >
       function onWeightChange() {
           document.getElementById('btnFinish').disabled = true;
           document.getElementById('btnConfirmQuestion').disabled = true;
           if (document.getElementById('txtWeight').value != "") {
               document.getElementById('btnFinish').disabled = false;
               document.getElementById('btnConfirmQuestion').disabled = false;
           }
       }
</script>

我用以下方式在代码隐藏中调用我的 JS:

            txtWeight.Attributes.Add("onchange", "return onWeightChange();");

这里出了什么问题?我希望在文本框中输入文本后立即启用我的按钮,并且不需要从文本框中更改焦点

谢谢

【问题讨论】:

  • 使用onkeypress 而不是onchange

标签: javascript asp.net


【解决方案1】:

onchange 在用户离开元素时触发,在元素有焦点时不会触发。

您需要结合onchange 事件使用onkeypressonkeyup 键事件。您需要onchange 事件,因为无需按键即可更改控件的值!

【讨论】:

    【解决方案2】:

    我相信您需要绑定的正确事件是 keydown 事件,如 http://www.w3schools.com/jsref/event_onkeydown.asp 所示,或者可能是 keyup,具体取决于您需要的行为。

    【讨论】:

    • 我不知道,谢谢。我认为 w3schools 链接仍然有效且正确地显示了关键事件的详细信息。
    【解决方案3】:

    您应该尝试 onkeyup 方法,因为 onchange 仅在您的文本框失去焦点时触发,并且如果有人将某些内容粘贴到您的文本框中,您应该尝试 onpaste 方法,这种组合应该可以正常工作。

    txtWeight.Attributes.Add("onkeyup", "return onWeightChange();");
    txtWeight.Attributes.Add("onpaste", "return onWeightChange();");
    

    【讨论】:

      【解决方案4】:

      onchange() 事件只会在用户离开输入框时触发。你想使用事件&lt;input type="text" id="txtWeight" onkeyup="onWeightChange(this)" /&gt;

      <script type="text/javascript" >        
        function onWeightChange(el) {                             
            document.getElementById('btnFinish').disabled = e.value.length;                    
            document.getElementById('btnConfirmQuestion').disabled = el.value.length;    
        } 
      </script> 
      

      【讨论】:

      • 使用文件菜单将文本粘贴到文本框中,您的代码现在可以工作了吗?
      • 嗯...好问题。不确定 keyup 是否适用于控制键。让我检查一下,然后回复你。
      • 是的,onkeyup 事件是使用 ctrl-v 触发的,但是,它仍然可以通过鼠标右键单击更改,粘贴。在这些情况下,您可以保留 onchange 事件或添加 onpaste 事件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 2019-05-16
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      相关资源
      最近更新 更多