使用用户输入更改或更新复选框值

时间:2018-10-31 08:41:52

标签: javascript php wordpress woocommerce

我目前正在处理一个WordPress项目,其中有一个使用WooCommerce组成的网上商店,作为一个实践项目,我决定为客户创建退款系统,以便他们可以向其发送“退款请求”网站管理员接受还是拒绝。

退款标签分为3个不同的页面,在第一页上,客户通过输入姓名,邮政编码和订单号来确认订单,在第二页上,客户可以选择要订购的产品,输入数量,然后选中产品的复选框,则它们的数量。第三页只是确认页,客户也可以在该页中发送消息,然后按“发送请求”按钮。按下按钮后,来自请求选项卡的信息将插入到名为wp_refundrequests的自定义表中,该表用于在管理页面上显示所有请求。

我的问题是,在第二页上,客户应该选择要退款的某些产品的数量,总是在我的代码中显示最大数量,而我无法确定如何处理为了使其正常工作,只用用户输入的金额即可。

这是第二页的代码,这里的问题是:

<div class="Etusivu">
    <form action="" method="post" style="border:0px solid #ccc">
<legend><b>Product refund</b></legend>
          <div class="step">
        <legend>Step 2/3</legend>
      </div>
      <br />
          <p class="important">Order information</p>
          <br />
          <div class="valitse">

        <p class="important">Choose all of the products you want to refund.</p>
      </div>
        <hr>

        <script>
        //function for making a checkbox to check all checkboxes
        function toggle(source) {
          checkboxes = document.getElementsByName('productinfo[]');
          for(var i=0, n=checkboxes.length;i<n;i++) {
            checkboxes[i].checked = source.checked;
          }
        }
        </script>
          <input type='checkbox' onClick='toggle(this)' />

        <p class="selectall">Select all products</p>

        <label>The order:</p>
        <br />
        <?php
        //Gets and displays data based on certain variables from the database, connects quantity and product name into one string in
        $order = wc_get_order( $ordernumber );

        foreach ($order->get_items() as $item ){

          $unitprice = $item->get_total() / $item->get_quantity();
  // This is the part that currently gets the quantity value for the next page/the refund request
          echo "<input type='checkbox' name='productinfo[]' value='" . " " . $item->get_name() . "  ,  " . $item->get_quantity() . " QTY" . " | " . $item->get_total() ."'>";
          echo '<p>';
          echo __('Product name: ' ) . $item->get_name() . '<br>';
          if($item->get_quantity() > 1) {
            echo "Quantity: " . "<input type='number' name='numberqty' value='" . $item->get_quantity() . "'max='" .$item->get_quantity() . "' min='1' > " . "<br/>";
          }
          else {
          echo __('Quantity: ' ) . $item->get_quantity() . '<br>';
        }
        if ($item->get_quantity() > 1) {

          echo __('Product price: ') . $unitprice . '€' . '<br/>';
        }
          echo __('Products total: ' )  . wc_price($item->get_total()) . '</p>' . '<br/>';
       }
        echo '<p>'. __('Order total: ') . $order->get_total() . '</p>';
        ?>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


        <input type="submit" id='check' value="Next"/>
        <script>
        //Checks if any checkboxes have been checked, if not, displays an error
        function checkBoxCheck() {
          if($('input[name="productinfo[]"]:checked').length) {
            console.log("at least one checked");
            return true;
          }
          else {
            alert("Select at least 1 product.");
            return false;
          }
        }
        //runs the script for checking the checkboxes
        $('#check').on('click', checkBoxCheck);
      </script>
        </label>
          <input type="hidden" name="page" value="2">
    </form>
    <br />
</div>
</body>
</html>
<?php

编辑:因此,为了更清楚一点,这里的问题是我正在建立一个系统,客户可以使用该系统退回第2/3页上的某些当前我遇到问题的产品,用户可以查看他的订单中包括的所有产品,并且所有产品都有自己的复选框,因此用户可以选择要退款的产品。现在,当用户选择一个产品并按下“下一步”时,下一页3/3会显示所选信息。该页面上显示的值是产品名称,产品价格和产品QUANTITY。但是,QUANTITY的金额始终与客户订购的金额相同,并且在2/3页(用户选择要退款的产品的位置)上,我希望能够输入我要退款的产品数量退款,并在复选框数组中具有此值。

例如。我已经购买了5条电缆,但是我只想退还其中2条,所以我在输入字段中输入了2。

1 个答案:

答案 0 :(得分:1)

首先,您必须更改以下内容:

      echo "<input type='checkbox' name='productinfo[]' value='" . " " . $item->get_name() . "  ,  " . $item->get_quantity() . " QTY" . " | " . $item->get_total() ."'>";

      echo "<input type='checkbox' class='" . $item->get_id() . "checkBox' name='productinfo[]' value='" . " " . $item->get_name() . "  ,  " . $item->get_quantity() . " QTY" . " | " . $item->get_total() ."'>";

这:

      if($item->get_quantity() > 1) {
        echo "Quantity: " . "<input type='number' name='numberqty' value='" . $item->get_quantity() . "'max='" .$item->get_quantity() . "' min='1' > " . "<br/>";
      }

对此:

      if($item->get_quantity() > 1) {
        echo "Quantity: " . "<input type='number' class='" . $item->get_id() . "' name='numberqty' value='" . $item->get_quantity() . "'max='" .$item->get_quantity() . "' min='1' onchange='changeCheckBoxValue(this.className)'> " . "<br/>";
      }

如果您的商品上没有get_id(),请使用任何唯一标识符。

以下这段代码负责触发更改复选框值的事件 onchange='changeCheckBoxValue(this.className)

最后在代码中添加以下功能:

function changeCheckBoxValue(className) {

    var checkBox = document.getElementsByClassName(className + 'checkBox')[0];
    var currentValue = checkBox.value;
    var wantedAmount = document.getElementsByClassName(className)[0].value;
    checkBox.value = currentValue .replace(new RegExp('[0-9]* QTY'),wantedAmount + ' QTY');
}

这将更新复选框的值

祝你好运