只要没有主页涉及,我可以成功地获得简单的示例。我想做的就是在使用主页时点击一个按钮,并使用.js文件中的javascript使其显示“hello world”。非常感谢任何帮助 :)
只要没有主页涉及,我可以成功地获得简单的示例。我想做的就是在使用主页时点击一个按钮,并使用.js文件中的javascript使其显示“hello world”。非常感谢任何帮助 :)
编辑
正如@Adam在评论中指出的那样,有一个本地的jQuery机制基本上与我原始答案中的hack做的一样。使用jQuery,您可以执行以下操作:
$('[id$=myButton]').click(function(){ alert('button clicked'); });
我的黑客技巧最初是为了ASP.NET而开发的原型解决方案,后来我将其适用于原始答案。请注意,jQuery在幕后基本上执行相同的操作。我建议使用jQuery方式,而不是实现我的黑客技巧。
原始答案保留以供评论上下文
当您使用主页面时,ASP.NET会损坏依赖页面上控件的名称。您需要找到一种方法来找到正确的控件以添加处理程序(假设您正在使用JavaScript添加处理程序)。
我使用此函数来完成此操作:
function asp$( id, tagName ) {
var idRegexp = new RegExp( id + '$', 'i' );
var tags = new Array();
if (tagName) {
tags = document.getElementsByTagName( tagName );
}
else {
tags = document.getElementsByName( id );
}
var control = null;
for (var i = 0; i < tags.length; ++i) {
var ctl = tags[i];
if (idRegexp.test(ctl.id)) {
control = ctl;
break;
}
}
if (control) {
return $(control.id);
}
else {
return null;
}
}
jQuery(asp$('myButton','input')).click ( function() { alert('button clicked'); } );
<asp:Button ID="myButton" runat="server" Text="Click Me" />
ResolveUrl
方法将确保您的js文件始终可以找到:
如果您的网站有其他文件夹中的内容页面,在src路径中使用页面的ResolveUrl
方法将确保您的js文件始终可以找到:
<script type="text/javascript" src='<%= ResolveUrl("~/Scripts/jquery-1.2.6.min.js") %>' ></script>
Public Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Dim lit As New Literal() lit.Text = String.Format("<script type='text/javascript' src='{0}'><" & "/script>", ResolveUrl("~/Script/jquery-1.6.1.js")) Page.Header.Controls.Add(lit) End Sub
- Andomar请确保jQuery已添加到母版页中。假设您拥有此控件:
<asp:Button ID="myButton" runat="server" Text="Submit" />
你可以使用以下方法将JavaScript与其连接:
$(document).ready(function() {
$('[id$=myButton]').click(function() { alert('button clicked'); });
});
$(document).ready()
会在DOM完全加载后触发,此时所有的元素都应该已经加载完成。你可以通过以下方式进一步简化:
$(function() {});
选择器语法$('[id$=myButton]')
基于元素的id属性进行搜索,但仅匹配字符串的末尾。相反,'[id^=myButton]'
将匹配开头,但为了过滤掉UniqueID,这将没有什么用处。使用jQuery,您可以使用许多更有用的选择器。 学习它们所有,你会发现很多工作都已经完成了。将<script type="text/javascript" src="jquery.js" />
标签移到主页面的标签中即可。这样,您可以在所有内容页面中使用jQuery。
使用主页和jQuery没有什么神奇之处。
Adam的解决方案是最好的。简单易懂!
母版页面:
<head runat="server">
<title></title>
<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
<script src="Scripts/jquery-1.3.2.js" type="text/javascript"></script>
<asp:ContentPlaceHolder ID="HeadContent" runat="server">
</asp:ContentPlaceHolder>
</head>
内容页面:
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
<script type="text/javascript">
$(document).ready(function () {
$("[id$=AlertButton]").click(function () {
alert("Welcome jQuery !");
});
});
</script>
</asp:Content>
按钮所在位置
<asp:Button ID="AlertButton" runat="server" Text="Button" />
在头部引用以下代码:
<script type="text/javascript" src="/Scripts/jquery-1.2.6.min.js"></script>
有些浏览器不喜欢以 /> 结尾。
然后,您可以编写类似于
$('#<%= myBtn.ClientID%>').show()
当页面与主页面一起呈现时,控件ID在页面呈现时会发生更改,因此我们无法像这样在jQuery中引用它们#controlid
。相反,我们应该尝试使用input[id$=controlid]
。如果控件呈现为输入控件或作为锚标记,则在jQuery中使用a[id$=controlid]
。
看看这篇文章:
http://blogs.msdn.com/webdevtools/archive/2008/10/28/rich-intellisense-for-jquery.aspx
还解释了如何在Visual Studio中获得jQuery的智能感知。主页面:
jQuery 库放在主页面中。请检查路径是否正确引用。您可能想要添加额外的文档,如下所示:
<head>
<script type="text/javascript" src="/Scripts/jquery-1.2.6.min.js"></script>
<% if (false) { %>
<script type="text/javascript" src="/Scripts/jquery-1.2.6-vsdoc.js"></script>
<% } %>
</head>
主页面:
<head>
<script type="text/javascript">
$(document).ready(
function()
{
alert('Hello!');
}
);
</script>
</head>
内容页和用户控件的 CodeBehind:
this.textBox.Attributes.Add("onChange",
String.Format("passElementReferenceToJavascript({0})", this.textBox.ClientID));
如果有人想要访问一个标签,这里是语法
$('[id$=lbl]').text('Hello');
其中lbl
是标签ID,要在标签中显示的文本为“Hello”