这是上下文:
我正在构建一个.aspx页面,允许用户管理我们服务器上的一些 xml 文档。页面内容是使用 AJAX 加载的,因此按钮和表单会动态添加到文档中。
如果我在.aspx页面上加载之前在页面中创建静态按钮,我可以轻松地将事件附加到该页面。但是,我使用 jQuery 动态添加和删除按钮和表单。
下面是一个简化的示例:
在下面的jsFiddle中,我假装html文档包含以下脚本:
<script language="C#" type="text/C#" runat="server">
void SaveAllChanges(Object sender, EventArgs e)
{
Button clickedButton = (Button)sender;
clickedButton.Text = "foobar";
}
</script>
我有一个包含以下内容的javascript文件:
$('button.buttonGenerator').click(function() {
$('.buttonContainer').append(
'<button onclick="SaveAllChanges">' +
'Save All Changes!' +
'</button>'
);
});
显然,我正在创建的按钮无法以现在的方式运行"保存全部更改"功能。我添加了 onclick 属性,以伪代码样式显示我需要发生的事情。
如何使动态添加的按钮可以运行我在文档顶部的脚本标记中定义的 C# 方法?
这是jsfiddle:http://jsfiddle.net/2XwRJ/
谢谢。
你可以给所有必须保存更改的按钮一个公共类(例如.class="ajaxButton"),并有一个jQuery方法来响应与该类匹配的元素上的单击事件(使用live,以便反映对DOM的更新)。
$("button.ajaxButton").live("click", function(){
// Perform your Ajax callback to run server-side code
});
做的是使用类似.的东西。
$(document).ready(function() {
$('button.buttonGenerator').click(function() {
$('.buttonContainer').append(
'<button id="#dynamicCommentButton" onclick="SaveAllChanges">' +
'Save All Changes!' +
'</button>'
);
});
$(document).on('click', '#dynamicCommentButton', function() {
alert($(this).attr('id'));
});
});
您将无法像那里那样添加按钮,因为此处的代码只是将其添加为 HTML DOM 元素,而 onclick
属性将是客户端元素上的。因此,单击该按钮将尝试触发一个SaveAllChanges
的javascript函数
$('.buttonContainer').append(
'<button onclick="SaveAllChanges">' +
'Save All Changes!' +
'</button>'
);
最好的办法是在javascript中创建该SaveAllChanges
函数,然后您可以从那里处理它。我认为您能够做到这一点的两种方法是:
- 有一个 http 端点设置(脚本服务、Web API 或只是发布到页面),你可以从你的 JavaScript 使用 Ajax 调用它。然后,您可以传递任何所需的参数。
- 你可以在页面上有一个隐藏的元素和隐藏的按钮,这样当调用javascript时,它会填充你需要的任何参数,然后单击隐藏的按钮并将页面发布回去。
就个人而言,我会从用户体验的角度选择第一种方法,因为页面不会每次都回发。我使用了类似于第二种方法的东西,它工作正常,但感觉很笨拙。