0

我正在从后面的代码构建一个页面。我添加一个按钮并设置它的属性,如下所示:

var Button1 = new Button();
Button1.Text = "Purge Course Comments";
Button1.Attributes.Add("OnClientClick", "javascript: Purge();");
pageButtons.Controls.Add(Button1);

该按钮被添加到名为“pageButtons”的 div 中。当我测试程序时,该按钮正常显示在屏幕上,但是当我单击它时,除了浏览器回发之外什么也没有发生。

这个页面必须从后面的代码构建,所以我不能直接将按钮添加到页面,像这样(这会工作):

<asp:Button ID="Button1" runat="server" Text="Close Window" OnClientClick="Purge;"/>

基本上,我需要能够从后面的代码中调用该函数,但我运气不佳。有人可以告诉我我做错了什么吗?

编辑:我在 Stackoverflow 上查看了类似的问题,但在这种情况下我找不到一个对我有用的答案。

编辑:为清楚起见,这是我在页面上定义的清除功能:

function PurgeCourse() {
        strCourseId = getQueryString("Id");
        if (strCourseId == "") {
            strCourseId = getQueryString("CourseId");
        }
        window.open("Purge.aspx?id=" + strCourseId);
        parent.window.close();
    }

如果我只是手动将按钮添加到页面中,如上例所示,它可以工作。但是,我似乎无法从后面的代码中调用它。

编辑:我尝试了下面的建议,现在我的代码如下所示:

var Button1 = new Button();
Button1.Text = "Purge Course Comments";
Button1.OnClientClick = "javascript: Purge();";
pageButtons.Controls.Add(Button1);

不幸的是,这也不起作用。不过,我将重申,如果我手动将按钮添加到页面并将 OnClientClick 属性设置为调用 Purge(),则该功能确实有效。似乎我无法从后面的代码中获取该功能,这令人沮丧,因为我不明白为什么。这是一个小测试页面,只有一个函数和一个 div 以及后面的代码。我看不出问题出在哪里。

编辑:我只是尝试了另一件事,只是想看看它是否会起作用。我做了以下事情:

Button1.OnClientClick = "javascript: parent.window.close();";

这很有效,所以按钮至少可以使用内联 javascript 代码。只是没有从后面的代码“看到”页面上的我的功能。

4

1 回答 1

1

不要OnClientClick作为属性添加到输出中。这是 Button 类的属性,在服务器端,所以简单地做

Button1.OnClientClick = "javascript: PurgeCourse();";

<asp:Button runat="server" onclientclick="javascript: PurgeCourse();" />

在客户端,这被渲染到onclick属性中。

<button onclick="javascript: PurgeCourse();" />

通常要停止处理事件,这也称为event.preventDefault()(Microsoft 直到最近才喜欢/得到这个),或return false. 所以你的函数要么总是返回假,

Button1.OnClientClick = "javascript: PurgeCourse(); return false;";

或者您返回函数的值,以便可以决定提交是终止还是继续:

Button1.OnClientClick = "javascript: return PurgeCourse();";

<script type="text/javascript">
function PurgeCourse () {
   return false; // or return true;
}
</script>
于 2013-09-04T15:35:54.777 回答