2016-01-03 4 views
1

Редактировать: я получил это, наконец,! Ниже мой пример. Надеюсь, это поможет кому-то еще в той же необходимости.Как получить значение переключателей, чтобы можно было изменить значение

У меня есть необходимость в переключателе доставки. Один для обычной доставки и один для экспресс-доставки.

После некоторой помощи и прибегая к помощи cale_b здесь в этой форме, моя проблема заключается в следующем:

У меня есть цикл Еогеаспа, который должен получить значения из базы данных и отображение их на одной странице. Мне нужен переключатель переключателей (или все, что работает одинаково), чтобы выбрать, какой тип доставки пользователь хочет. Мне нужна кнопка покупки в каждой строке, чтобы получить общую сумму, рассчитанную с другой php-страницы.

Я могу извлечь всю эту информацию из своей базы данных доставки и выполнить вычисления и отправить ее обратно на страницу с помощью ajax, но мне нужно иметь возможность динамически получать цену, размер, тип и shippingType, отправленные и возвращенные на основе каждый ряд. Затем используйте эту новую общую стоимость и назначьте ее в поле ввода, называемое totalCost для отправки.

Ниже приведен код html/php, который я использую сейчас.

<div class="details"> 
    <table class="default"> 
     <th>Type</th> 
     <th>Size</th> 
     <th>Price</th> 
     <th>Shipping</th> 
     <th>Total</th> 
     <th>Buy</th> 

    <?php 
     $getArtDetails = get_tableContentsWhere($con,'prices','artID',$id); 
     foreach($getArtDetails as $detail) 
     { 

    ?> 
     <tr> 
      <td class="type"><?= $detail['type'] ?></td> 
      <td class="size"><?= $detail['size'] ?></td> 
      <td class="price">$<?= $detail['price'] ?>.00</td> 
      <td> 
       <input type="radio" name="shipping_<?= $detail['id'] ?>" class="radio" value="Xpress">Express Shipping 
       <input type="radio" name="shipping_<?= $detail['id'] ?>" class="radio" value="Regular">Regular Shipping 
       <input type="radio" name="shipping_<?= $detail['id'] ?>" class="radio" value="Free">Free Shipping 
      </td> 
      <td class="shipping"></td> 
      <td> 
       <form action="" method="post"> 
        <input type="hidden" name="totalCost" value="set by jquery?"> 
        <input type="submit" name="submit" value="Buy"> 
       </form>               
      </td> 
     </tr> 
    <?php } ?> 


    </table> 

</div> 

Вот файл getShipping.php, который возвращает мою полную стоимость.

shipping.php:

<?php 
include 'admin/config/functions.php'; 

$size = $_GET['size']; 
$type = $_GET['type']; 
$price = $_GET['price']; 
$shippingType = $_GET['shippingType']; 

$shipping = get_shippingRate($con,$size,$type,$shippingType); 

$totalCost = $shipping + $price; 

echo $totalCost; 

Следующий скрипт делает то, что мне нужно это сделать, но с 2 проблемы 1. Когда я поднимаю радиокнопку изменения значений для всех из них вместо каждого , cale_b Я попробовал ваше решение здесь для поиска следующего TR, но он не возвращает результаты. В свою очередь, он не устанавливает ввод для представления либо 2. Другая проблема заключается в том, что мне нужно отправить размер, тип и цену динамически на мою страницу getShipping.php. Я тоже не знаю, как это сделать.

<script> 
$('input[name^="shipping"]').each(function(index) { 
    $(this).on('click', function(){ 
     var shippingType = $(this).val(); 
     var size = $(this).closest('tr').find('td.size').text(); 
     var type = $(this).closest('tr').find('td.type').text(); 
     var price = $(this).closest('tr').find('td.price').text(); 
     // I had to set $(this) to equal $this so I could access it within the ajax call as $(this) was referring to itself. 
     var $this = $(this); 


     $.ajax({ 
      type: "GET", 
      url: "getShipping.php", 
      data: 'size=' + size + '&type=' + type + '&shippingType=' + shippingType + '&price=' + price, 
      success:function(data){ 
       //called when successful 
       $this.closest('tr').find('td.shipping').html(data); 
      }, 
      error: function(e) { 
       //called when there is an error 
       console.log(e.message); 
      } 
     }); 
    }); 
}); 
</script> 

Так со всем выше коде, оказывается я близка к тому, что я ищу, но нужны дополнительные указания.

Любая помощь этому будет принята с благодарностью.

Спасибо,

JAC

+0

Где ваш Аякс? Нам нужна дополнительная информация, чтобы помочь в этом. Или вы на самом деле не имеете в виду ajax, а просто jQuery? (Так как значение находится в ваших элементах ввода)? –

+0

@cale_b Сейчас у меня нет никаких прав. Вот с чем мне нужна помощь. Я не знаю, должно ли оно быть ajax или jquery. Оба являются для меня совершенно новыми. – jAC

+0

@cale_b добавил скрипты, которые я пробовал (один jquery и один ajax) – jAC

ответ

2

Если я правильно понял ваш вопрос правильно, вам не нужно AJAX.

Во-первых, изменить ваш HTML следующим образом:

<tr> 
     <td><?= $detail['type'] ?></td> 
     <td><?= $detail['size'] ?></td> 
     <td class="product_price">$<?= $detail['price'] ?>.00</td> 
     <td> 
      <input type="radio" name="shipping_<?= $detail['id'] ?>" class="radio" value="30">Express Shipping 
      <input type="radio" name="shipping_<?= $detail['id'] ?>" class="radio" value="15">Regular Shipping 
      <input type="radio" name="shipping_<?= $detail['id'] ?>" class="radio" value="0">Free Shipping 
      <input type="hidden" class="shipping_amount" name="shipping_amount_<?php echo $detail['id']" value=""> 
     </td> 
     <?php // Create a "container" for the price ?> 
     <td class="shipping"></td> 
    </tr> 

Затем на верхней части выхода/в вашем <head>, добавьте следующий код:

// Document Ready - wait until page is loaded 
jQuery(function($) { 
    // Select all inputs with name starting with "shipping". Don't need script inside of the loop 
    $(document).on('click', 'input[name^="shipping"]', 
     function() { 
      // Get the price from the clicked input 
      var shipping = parseFloat($(this).attr('value')); 
      var price = parseFloat($(this).html()); 
      var total = price + shipping; 
      // Find the proper cell, and set the display to the amount 
      $(this).closest('tr').find('td.shipping').html(shipping); 
      $(this).closest('tr').find('input.shipping_amount').val(shipping); 
      $(this).closest('tr').find('input[name^="totalCost"]').val(total); 
     } 
    ); 
}); 

Это полагается на каждый «Доставка» находится в строке таблицы, а на дисплее доставки - в ячейке таблицы в этой строке.

ПРИМЕЧАНИЕ
Код выше был отредактирован также поддерживает вход, который будет принят, когда форма была отправлена. Поскольку этот вход не был в исходном коде вопроса, я сделал предположения - ищите «shipping_amount».

ДОПОЛНИТЕЛЬНОЕ ПРИМЕЧАНИЕ Приведенный выше код был изменен, чтобы также обеспечить обновление для «TotalCost» вход в форме.
Обратите внимание на, что класс добавлен в ячейку «цена» (элемент td).

Если вы отправляете эту форму таким образом, вы будете хотеть также:

  1. Submit, какой продукт идентификатор заказанного. Таким образом, при проверке формы (сторона PHP) вы можете загрузить продукт из БД и проверить цену.
  2. Укажите, какая доставка будет выбрана. Таким образом, вы можете проверить стоимость доставки.

Для этого ваши теги формы должны PROBABLY обернуть всю таблицу, и вы должны добавить скрытый ввод, содержащий «идентификатор продукта», чтобы вы могли получить эту информацию, а также выбранную переключатель.

Удачи вам!

+0

, это близко к тому, что я хочу, но мне все еще нужно значение, которое возвращается назначенной переменной php, поэтому Думаю, мне нужен аякс. Я должен уметь принять этот результат и передать его кнопке «Получатель», которая будет создана позже. Также обратите внимание, что мое имя ввода добавляется с идентификатором, так как в цикле for может быть более одного набора переключателей. Это также не всегда может быть таблицей. Некоторые из материалов, которые я читал, заключались в том, чтобы использовать его вместо класса ввода, но я получал слишком много противоречивых сообщений. – jAC

+0

Да! Я считаю, что это будет делать именно то, что мне нужно! Умный на заданном входе скрытое поле, чтобы передать его. Спасибо огромное! Я отредактирую, чтобы удалить материал ajax. – jAC

+0

Hrm ... почти делает то, что я хочу. Мне нужно добавить цену доставки к цене предмета, прежде чем он покинет страницу. – jAC

1

cale_b является правильным. Не похоже, что вам нужен AJAX. AJAX используется, когда вам нужно общаться с сервером и обычно используется для работы с базой данных (глядя на вещи «на лету», сохраняя новое значение и т. Д.).

Пункт AJAX заключается в том, что он связывается с сервером, отправляет данные на сервер и (опционально) получает данные с сервера, , не обновляя страницу. Форма HTML также отправляет данные на сервер, но как только пользователь нажимает Submit, текущая страница изменяется на страницу «действие».

В вашем примере кажется, что вам нужно использовать переменную javascript, не обязательно переменную PHP. Если все, что вы хотите сделать, это захватить информацию со страницы, сохраните ее в переменной (возможно, выполните некоторую математику, используя другие значения из других полей), а затем верните продукт обратно на ту же страницу - взаимодействие с сервером не требуется. Javascript/jQuery будет делать это просто отлично.

Для лучшего понимания того, что AJAX это все о, этот пост имеет много примеров начинающих:

AJAX request callback using jQuery

А вот хороший (free) introduction video to AJAX