Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Интерпретируемые языки _ Web/JavaScript: Как прочитать в переменную поле ввода (input)

Автор: Litkevich Yuriy 28.6.2013, 20:51

Продолжаю навёртывать на свой интернет-магазин яндекс метрику. Застопорился на учёте товаров положенных в корзину.
На странице товара есть поле, в которое пользователь вводит кол-во, дальше нажимает кнопку "В корзину" на эту кнопку повешан, кроме штатаного, дополнительный обработчик Метрики.
Код выглядит так:

Раскрывающийся текст

      <div class="cart">
        <script type="text/javascript">
            var yaGoalParams = {
                product_id: "<?php echo $product_id; ?>",
                name: "<?php echo $model; ?>",
                price: <?php echo $price_num; ?>,
                quantity: 1
            };
        </script>
        <div><?php echo $text_qty; ?>
          <input type="text" name="quantity" size="2" value="<?php echo $minimum; ?>" />
          <input type="hidden" name="product_id" size="2" value="<?php echo $product_id; ?>" />
           <input type="button" onclick="yaCounter16843852.reachGoal('to_cart_product', yaGoalParams); return true;" value="<?php echo $button_cart; ?>" id="button-cart" class="button" />
          </div>
        <div><span>   <?php echo $text_or; ?>   </span></div>
        <div><a onclick="addToWishList('<?php echo $product_id; ?>');"><?php echo $button_wishlist; ?></a><br />
          <a onclick="addToCompare('<?php echo $product_id; ?>');"><?php echo $button_compare; ?></a></div>
        <?php if ($minimum > 1) { ?>
        <div class="minimum"><?php echo $text_minimum; ?></div>
        <?php } ?>
      </div>

тут есть один неприятный момент переменная yaGoalParams объявлена заранее (я так понял она должна быть раньше вызова метода reachGoal, либо она должна передаваться непосредственно в метод reachGoal).
Как бы мне воткнуть вместо
quantity: 1
значение из поля
<input type="text" name="quantity" ...
которое ввёл пользователь

Автор: ViGOur 1.7.2013, 11:20

Тебе явно нужно использовать Ajax, в котором повесить на поле событие ввода, а во время ввода уже менять твою переменную примерно так: yaGoalParams.quantity = valueFromInput;

Автор: Litkevich Yuriy 1.7.2013, 14:12

Эдик, а можешь привести пример как его навешивать?
Ajax в движке интернет-магазина активно используется, только я пока не понимаю, куда можно лезть, а куда нет.

Автор: ViGOur 1.7.2013, 21:20

Посмотри: http://api.jquery.com/val/

И переменную value из данного примера присваивай:
yaGoalParams.quantity = value;

Автор: Litkevich Yuriy 1.7.2013, 21:51

В общем переделал код, на странице присутствовал штатный обработчик добавления в корзину, перенёс всё добро по учёту в него. Получилось так так:

Раскрывающийся текст

<script type="text/javascript"><!--
$('#button-cart').bind('click', function() {
    $.ajax({
    ... // тут штатный обработчик добавления в корзину
    });
    
    var yaGoalParams = {
        product_id: "<?php echo $product_id; ?>",
        name: "<?php echo $model; ?>",
        price: <?php echo $price_num; ?>,
        quantity: $('.product-info input[type=\'text\']').val()
    };
    yaCounter16843852.reachGoal('to_cart_product', yaGoalParams);
});
//--></script>

Сначала написал $('.product-info input[type=\'text\']') без метода val(), как увидел то твоего, Эдик, совета на главной странице http://jquery.com/ (в низу var hiddenBox = $( "#banner-message" );).
Потом посмотрел в Opera Dragonfly, что в reachGoal параметр Кол-ва передаётся как объект, добавил метод val(), стала передаватся строка (Opera Dragonfly показывает величину в кавычках)

Осталось не понятно после функции вал надо ли ставить точку с запятой или нет? (работает вроде, но вдруг это, например, дурной тон, ...)

Посмотрю как это в метрике учитывается, она с задержкой отображает.

Автор: ViGOur 3.7.2013, 11:11

Цитата(Litkevich Yuriy @ 1.7.2013, 22:51) *
Осталось не понятно после функции вал надо ли ставить точку с запятой или нет? (работает вроде, но вдруг это, например, дурной тон, ...)
Я ставлю, так как незнаешь как и кто реализует интерпретатор JavaScript... :)

Автор: Litkevich Yuriy 3.7.2013, 11:30

Эдик всё работает, как надо. Спасибо!

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)