2011-07-29 132 views
0

我只有一个按钮,并提到当用户在jQuery的帮助下点击按钮时该怎么做。但是当我点击那么没有发生只有回发发生。我不想要回传。与jquery相关的问题

这里是我的代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="BBAWeb.WebForm1" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
     <script src="Scripts/jquery-1.6.2.min.js" type="text/javascript"/> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $('#btn').click(showMessage); 
      return false; 
     }); 

     function showMessage() { 
      $('#message').fadeIn('slow').html("Hello"); 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Button ID="btn" runat="server" Text="Click Me" /> 
     <div id="message">welcome to kolkata</div> 
    </div> 
    </form> 
</body> 
</html> 

请看看我的代码,并告诉我什么是错的。我想提一个建议。

+0

你肯定asp的按钮控件,当它运行客户端这个ID?我不知道这一点,但我想我记得控制ID是完全独立于HTML ID –

回答

2

首先,当按钮最终显示在页面上时,asp.net会将按钮ID更改为更独特,以便更好地管理所有内容。

所以你的jQuery $(“btn”)将无法找到任何东西。

代替,只是增加一类,说: “myBtn” 你的按钮,这样做:

<asp:Button ID="btn" runat="server" Text="Click Me" CssClass="myBtn" /> 

和JS:

<script> 
$(".myBtn").click(function(event) { 
    event.preventDefault(); 
    showMessage(); 
}); 
</script> 

这应该工作。

1

return false应该是点击事件处理中,但最好是使用e.preventDefault()

$(document).ready(function() { 
    $('#<%= btn.ClientId%>').click(showMessage); 
}); 

function showMessage(e) { 
    e.preventDefault(); 
    $('#message').fadeIn('slow').html("Hello"); 
} 
1

更改按钮选择这样:

$('#<%= btn.ClientId%>').click(showMessage); 

并移动将返回false进入showMessage函数。

0

当你这样做$('#btn').click(showMessage); jQuery试图找到ID为“btn”的按钮,但是因为你有一个服务器控件的asp.net按钮,它的ID不是呈现为“btn”,而是ASP.NET增加了一堆字符串以避免重复的ID。

所以,为了让jQuery来能够找到你的按钮,改变你的脚本:

$('#<%= btn.ClientID %>').click(showMessage); 
0

有几个方法可以做到你想要做什么,和一对夫妇您的代码无法正常工作的原因。

首先,如果您想防止在ASP.NET Button控件上回发,您应该为其提供一个客户端OnClick处理程序,该处理程序返回false。您可以使用JavaScript设置处理程序(如您所做的那样),也可以在服务器端设置控件的OnClientClick属性。其次,如果您使用JavaScript设置处理程序,则需要使用Button的正确客户端ID。 Button的客户端ID不一定是您键入到Button的ID属性中的。在此代码:

<asp:Button ID="btn" runat="server" Text="Click Me" /> 

的ID “BTN”只是服务器端 ID,其可以在C#代码中使用。 客户端 ID将被重写为诸如“ctl00 $ MainContent $ btn”之类的内容,所以这就是您的JavaScript所需要的内容。您可以通过使用<%= btn.ClientID %>访问它,正如其他人指出:

$('#<%= btn.ClientID %>').click(showMessage); 

如果你使用.NET 4.0中,你还可以设置按钮的属性ClientIDMode="Static",然后btn都将在服务器上使用边或客户端。

<asp:Button ID="btn" runat="server" Text="Click Me" ClientIDMode="Static" /> 

所以,总结一下:你showMessage功能应该是这样的:

function showMessage() { 
     $('#message').fadeIn('slow').html("Hello"); 
     return false; 
    } 

和你的其他代码应该像这些之一:

1.

$(document).ready(function() { 
     $('#btn').click(showMessage); 
     return false; 
    }); 
... 
<asp:Button ID="btn" runat="server" Text="Click Me" ClientIDMode="Static" /> 

2.

$(document).ready(function() { 
     $('#<%= btn.ClientID %>').click(showMessage); 
     return false; 
    }); 
... 
<asp:Button ID="btn" runat="server" Text="Click Me" /> 

3.

//no $(document).ready needed 
... 
<asp:Button ID="btn" runat="server" Text="Click Me" OnClientClick="return showMessage()" /> 
+0

没有必要在$(document).ready() – Corneliu

+0

@Corneliu返回false - 我知道,但OP有它在他的代码中,所以我把它放在了里面。我在$(document).ready()中修改的唯一东西就是'<%= btn.ClientID%>'。 –