2012-05-22 33 views
2

好的我的基本问题是如何模拟javascript中的按钮单击。绑定的JavaScript函数

我知道我必须使用document.getElementById(“btnSubmit”)。click();但是这似乎并没有调用onClientClick JavaScript函数。

Enviorment:

我使用C#和JavaScript的ASP.NET。

发生了什么事: 我有一个输入文本区域,我想确保用户在启用提交按钮之前必须输入一个字符。我可以用onkeypress =“validateTxt();”然后称为此功能

function validateTxt() { 
    var input = document.getElementById("<%=txtUserName.ClientID %>").value; 
    //Need a min of 3 characters 
    if(input.length > 1) 
    { 
     document.getElementById("btnSubmit").disabled = false; 
    } 
    else 
    { 
     document.getElementById("btnSubmit").disabled = true; 
    } 
} 

但唯一的问题是不注册退格。

为了解决这个问题,我发现这个在线

<script type="text/javascript"> 
     document.getElementsByName('txtUserName')[0].onkeydown = function (event) { 
     if (event === undefined) event = window.event; // fix IE 
     if (event.keyCode === 8) 
     validateTxt(); 
     if (event.keyCode === 13) { 
      document.getElementById("btnSubmit").click(); 
     } 
     }; 

现在,只要用户按下退格我的JavaScript函数被调用。这工作得很好,直到我发现当我按下从文本区域输入它不会调用我的JavaScript函数。

这里是所有相关的代码...

<script type="text/javascript"> 
function InformUser() 
{ 
    window.document.getElementById("loadingMessageDIV").style.display = "block"; 
    <%=Page.GetPostBackEventReference(btnSubmit as Control)%> 
    document.getElementById("btnSubmit").disabled = true; 
} 

function validateTxt() { 
    var input = document.getElementById("<%=txtUserName.ClientID %>").value; 
    //Need a min of 3 characters 
    if(input.length > 1) 
    { 
     document.getElementById("btnSubmit").disabled = false; 
    } 
    else 
    { 
     document.getElementById("btnSubmit").disabled = true; 
    } 
} 

</script> 

这里是文本区域+ JavaScript的边界功能

<asp:TextBox ID="txtUserName" runat="server" Font-Size="11pt" onkeypress="validateTxt();"></asp:TextBox> 
      <script type="text/javascript"> 
       //We bind the textbox to this function and whenever the backspace key is pressed it will validateTxt 
       document.getElementsByName('txtUserName')[0].onkeydown = function (event) { 
        if (event === undefined) event = window.event; // fix IE 
        if (event.keyCode === 8) 
         validateTxt(); 
        if (event.keyCode === 13) { 
         document.getElementById("btnSubmit").click(); 
        } 
       }; 
      </script> 

这里是提交按钮

<asp:Button ID="btnSubmit" runat="server" OnClientClick="InformUser();" OnClick="btnSubmit_Click" 
          Text="Login" Font-Bold="True" Enabled="True" /> 
         <script type="text/javascript"> 
//Disable the button until we have some actual input 
          document.getElementById("btnSubmit").disabled = true; 
         </script> 

所以回顾它按下按钮,但它也无法禁用它。我甚至试图直接调用InformUser,当用户按下Enter键,然后按下按钮,但那也不起作用。

我知道它与我如何将javascript函数绑定到文本区域有关,因为当我将它取出时,它可以正常工作。

感谢您的帮助

回答

0

如果你真正想要做的是启用/禁用基于文本区域的文字量的提交按钮,那么这将是最简单的只是为了检查长度每时间改变了。

你能使用jQuery吗?如果可以的话,这是一个微不足道的问题,因为jQuery使键盘事件正常化,所以你不必担心不同的浏览器引发不同的事件。

作为一个简单的实验,我创建了一个jsFiddle这个HTML:

<textarea id="txt"></textarea> 
<label id="count" /> 

和这个JavaScript:

$('#txt').keyup(function() { 
    $('#count').text($('#txt').val().length); 
}); 

在每一个keyup(我用KEYUP而非KEYDOWN或按键作为KEYUP火灾在文本被修改之后),长度被更新。这注册了正常的键,退格键,删除,输入等,并在FF和IE8中工作。

在你的情况,你显然会改变功能来启用/禁用提交按钮。

+0

只需注意用户可以按回车键,长度将为1,用户将能够提交 – peroija

+0

True - 与原始代码相同。如果你想解决这个问题,那么你可以在检查长度之前剔除任何回车符:$('#count')。text($('#txt')。val()。replace(/ [\ n \ r ]/g,'').length); –