2012-05-22 36 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); –