Огонь JavaScript по нажатию кнопки - PullRequest
0 голосов
/ 07 апреля 2011

Я работаю над добавлением некоторого аналитического кода на наш сайт электронной коммерции.То, что я делаю, - это написание какой-то конструкции 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();
    }

Ответы [ 4 ]

0 голосов
/ 08 апреля 2011

Я наконец получил это - вроде.Я закончил тем, что просто выполнил это в обратной передаче после нажатия кнопки.Не лучший способ сделать это, но так как это единственный элемент управления на странице, который вызывает обратную передачу, это не имеет значения.

0 голосов
/ 07 апреля 2011

Если я правильно понимаю, вы пытаетесь добавить некоторые функциональные возможности на стороне клиента к существующей кнопке при соблюдении определенных критериев. Но в то же время вам нужны кнопки предопределенной функциональности (пост назад?), Чтобы оставаться в силе?

Один из способов, которым я достиг такого поведения раньше, заключался в том, чтобы поместить прозрачный div поверх кнопки. Дайте div событие click, которое вызывает функцию расширения, а затем событие click соответствующей кнопки. Затем вы можете скрыть или показать div на основе любых критериев. Если показывается div, выполняется дополнительный код на стороне клиента, а затем передается событие click для кнопки, если div скрыто, тогда кнопка получает щелчок напрямую.

Не говорю, что это лучший вариант для вашего сценария, но он должен работать.

0 голосов
/ 07 апреля 2011

Вместо запуска сервера javascript, не могли бы вы просто установить свойство onclientclick кнопки и добавить туда свой javascript (не забывая вернуть true)?

0 голосов
/ 07 апреля 2011

Хорошо, я запустил следующий код, и он отлично работает здесь.

  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 - это просто накладные расходы.

...