2012-07-26 31 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()); 
});