点击按钮触发javascript

本文关键字:javascript 按钮 | 更新日期: 2023-09-27 17:49:37

我正在为我们的电子商务网站添加一些分析代码。我所做的是写一些构造javascript在字符串构建器,然后设置js在aspx方面的文字。诀窍是,我只希望在单击添加到购物车按钮时填充这个文字。很简单,在按钮单击事件中构建字符串并设置文本,对吗?嗯,我试过了,但行不通。除了这个新动作之外,按钮单击事件还需要保留其先前的动作。

测试时,我看不到正在设置的字符串。我遗漏了什么吗?

下面是我在aspx页面中的按钮代码,以及它下面的文字:

<asp:ImageButton ID="btnCartMain" runat="server" ImageUrl="~/Images/Buttons/btn_AddToCartFlat.gif" CommandName="AddToCart" AlternateText="Add to cart" OnClick="GroupedAddToCartClick" ImageAlign="AbsMiddle" />
<asp:Literal ID="litSCscAdd" runat="server"></asp:Literal>

下面是点击处理程序(底部有一个新字符串):

protected void GroupedAddToCartClick(object sender, EventArgs e)
    {
        int itemId = Convert.ToInt32(ddItems.SelectedValue);
        ProductItem prodItem = null;
        _prod.ProductItems.TryGetValue(itemId, out prodItem);
        if (ddShipTo.SelectedValue == string.Empty)
            rfName.Enabled = true;
        if (ProcessAddToCartClick(ddShipTo.SelectedValue,
            ddShipTo.SelectedItem.Text,
            Convert.ToInt32(txtQuantity.Text),
            prodItem, ddItems.SelectedIndex, string.Empty))
        {
            btnCartMain.ImageUrl = "~/Images/Buttons/btn_AddedToCart.gif";
        }
        //---- SITECATALYST -- add to cart event ///
        System.Text.StringBuilder sbSCseventscadd = new System.Text.StringBuilder();
        sbSCseventscadd.Append(String.Format("<script type='"text/javascript'">"));
        sbSCseventscadd.Append(String.Format("s.events='"scAdd'""));
        sbSCseventscadd.Append("</script>");
        this.litSCscAdd.Text = sbSCseventscadd.ToString();
    }

点击按钮触发javascript

嗯,我运行了下面的代码,它在这里工作得很好。

  protected void GroupedAddToCartClick(object sender, EventArgs e)
{
    System.Text.StringBuilder sbSCseventscadd = new System.Text.StringBuilder(); 
    sbSCseventscadd.Append(String.Format("<script type='"text/javascript'">")); 
    sbSCseventscadd.Append(String.Format("s.events='"scAdd'"")); 
    sbSCseventscadd.Append("</script>");
    this.litSCscAdd.Text = sbSCseventscadd.ToString();
}

首先,我尝试将一个普通字符串设置为字面量,它像魅力一样工作。使用JS,我得到这个aspx:

  <input type="image" name="btnCartMain" id="btnCartMain" src="Images/Buttons/btn_AddToCartFlat.gif" alt="Add to cart" align="absmiddle" style="border-width:0px;" />
<script type="text/javascript">s.events="scAdd"</script>

这就是你想要的,对吗?

当然,我得到一个运行时错误,s没有定义。

所以一定还有别的问题?button_click真的执行了吗?

除此之外,在这里使用StringBuilder是明显的开销。

如果我正确地遵循您正在尝试添加一些客户端功能到现有的按钮,当某些条件得到满足。但与此同时,您需要按钮的预定义功能(post back?)保持有效?

我以前完成这种行为的一种方法是在按钮的顶部放置一个透明的div。给div一个点击事件调用扩展函数,然后点击事件下面躺着的按钮。然后,您可以根据任何标准隐藏或显示div。如果div显示,则执行额外的客户端代码,然后将点击事件传递给按钮,如果div隐藏,则按钮直接接收点击。

并不是说这一定是您的最佳方案,但它应该是一个工作。

而不是触发javascript服务器端,你不能只是设置按钮的onclientclick属性,并在那里添加你的javascript(记得返回true)?

我终于明白了——算是吧。我最终只是在按钮被点击后的回发中执行它。这不是最好的方法,但是因为这是页面上唯一一个引起回发的控件,所以这无关紧要。