点击按钮触发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();
}
嗯,我运行了下面的代码,它在这里工作得很好。
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)?
我终于明白了——算是吧。我最终只是在按钮被点击后的回发中执行它。这不是最好的方法,但是因为这是页面上唯一一个引起回发的控件,所以这无关紧要。