2012-07-26 28 views
1

我創建了一個簡單的頁面來測試。Ajax Script Manager阻止了jquery?

我的頁面將有一個文本框和一個按鈕。如果你點擊一個按鈕,服務器端的按鈕點擊事件將在文本框內寫入一些文本。

然後我有一個jQuery函數檢測文本框的輸入按鍵。

如果它檢測到一個輸入按鍵,它會點擊按鈕。

標記:

<asp:TextBox ID="txtTest" runat="server"></asp:TextBox> 
<asp:Button ID="btnClick" runat="server" Text="test" onclick="btnClick_Click" /> 
<script type="text/javascript"> 
    $('#<%=txtTest.ClientID%>').keypress(function (e) { 
     var code = (e.keyCode ? e.keyCode : e.which); 
     if (code == 13) { //Enter keycode 
      $('#<%=btnClick.ClientID%>').click(); 
     } 
    }); 
</script> 

代碼隱藏:

protected void btnClick_Click(object sender, EventArgs e) 
{ 
    txtTest.Text = "btnclick click event"; 
} 

它工作正常,每刷新。

然後我實現了一個ScriptManager。

標記:

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:TextBox ID="txtTest" runat="server"></asp:TextBox> 
     <asp:Button ID="btnClick" runat="server" Text="test" onclick="btnClick_Click" /> 
     <script type="text/javascript"> 
      $('#<%=txtTest.ClientID%>').keypress(function (e) { 
       var code = (e.keyCode ? e.keyCode : e.which); 
       if (code == 13) { //Enter keycode 
        alert('hihi'); 
        $('#<%=btnClick.ClientID%>').click(); 
       } 
      }); 

     </script> 
    </ContentTemplate> 
</asp:UpdatePanel> 

代碼隱藏:

protected void btnClick_Click(object sender, EventArgs e) 
{ 
    txtTest.Text = "btnclick click event"; 
} 

然後它僅適用於第一次進入,螺母不上第二個進入。

有人曾經遇到過這樣的問題嗎?

回答

0

只要把這個代碼塊ScriptManager的標籤之外,它會正常工作

<script type="text/javascript"> 
       $('#<%=txtTest.ClientID%>').keypress(function (e) { 
        var code = (e.keyCode ? e.keyCode : e.which); 
        if (code == 13) { //Enter keycode 
         alert('hihi'); 
         $('#<%=btnClick.ClientID%>').click(); 
        } 
       }); 

</script> 
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
... 
... 

UPDATE

爲什麼你處理按鍵不是在$代碼(文件)。就緒?

$(document).ready(function() { 
    $('#<%=txtTest.ClientID%>').keypress(function (e) { 
         var code = (e.keyCode ? e.keyCode : e.which); 
         if (code == 13) { //Enter keycode 
          alert('hihi'); 
          $('#<%=btnClick.ClientID%>').click(); 
         } 
        }); 
}); 

請參閱以下thread,其中提到的問題是相似的。但是解決方案並不是將它放在document.Ready中,綁定點擊的腳本每次都通過調用RegisterStartupScript來綁定。

+0

是的,我已經試過了。它仍然不起作用。 – william 2012-07-26 08:31:42

+0

請嘗試我已更新的代碼。 – Anand 2012-07-26 09:12:12

0

我會在這裏做一些事情。首先,我會把你的JS代碼放在一個單獨的文件中,並從UpdatePanel中刪除<script>標籤。 (但是,如果您將以下腳本直接放入您的<head>標記中,這也將起作用)。這就意味着你不能使用ClientID屬性 - 我們將使用jQuery選擇器對其進行排序。此外,您需要綁定事件文檔準備和部分回發。所以在你的JS ...

//define the bind function 
function bindEvents(){ 
    //the selector '[ID$="txtTest"]' will select any element with ID ending 
    //txtTest - make sure there's only 1!! 

    $('[ID$="txtTest"]').keypress(function (e) { 
      var code = (e.keyCode ? e.keyCode : e.which); 
      if (code == 13) { //Enter keycode 
       alert('hihi'); 
       $('[ID$="txtTest"]').click(); 
      } 
    }); 
} 


//bind on doc ready 
$(function(){ 
    bindEvents(); 

    //and bind on partial postback too 
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(bindEvents()); 
});