如何使用变量名访问表单值?

时间:2017-07-22 10:23:00

标签: javascript google-apps-script google-sheets

我制作了一个脚本,用于在Google电子表格中生成表单,获取其输入值并将其附加到当前工作表。所有这一切都很好,直到我尝试访问具有变量名称的输入值。

我目前专注于尝试将输入输入到" Price"使用名称​​" vPrice"创建 i 的字段+(i + 1)其中 i 是之前输入的数字"变数数量" numVar

varItemAdd()中我可以单独访问这些值( vPrice1,vPrice2 等)并生成正确的值。我也可以访问 numVar 值但是当我尝试逐步调整 vPrice 变量以在电子表格上生成每个值时,它会显示为' undefined '

脚本:

function varItemAdd(form) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();

    var number = form.numVar;
    var attribNumber = form.numAttr;

    sheet.appendRow([form.manufacturer, number, attribNumber]);

    for (i=0;i<number;i++) {    
        var vPrice = "vPrice" + (i + 1);
        var vPriceInput = form.vPrice;
        sheet.appendRow([vPriceInput, number, attribNumber]);
        }
    return true;
    }

HTML

<body>
    <form>
        <!-- Select Number of Attributes to appear -->
        <h2 class="title">Number of Attributes:</h2>
        <input class="input-box" type="number" min="1" max="5" id="numAttr" name="numAttr" value="1"><br/>

        <!-- Select Number of Variations to appear -->
        <h2 class="title">Number of Variations:</h2>
        <input class="input-box" type="number" id="numVar" name="numVar" value="1"><br/>

        <h3 class="buttons" id="submit" onclick="addFields()">ADD</h3>
        <div id="attBoxes"></div>
        <div id="varBoxes"></div>
        <br>
        <input class="buttons" id="submit" type="button" value="SUBMIT"
    onclick="google.script.run
        //.withSuccessHandler(google.script.host.close)
        .varItemAdd(this.parentNode)" />
        <input class="buttons" id="reset" type="reset" value="RESET">

    </form>
</body>

<script type='text/javascript'>
    function addFields(){
        // Get number of variation inputs to create
        var number = document.getElementById("numVar").value;

        // Get number of attribute inputs to create
        var attribNumber = document.getElementById("numAttr").value;

        // Get container <div>s where dynamic content will be placed
        var varBoxes = document.getElementById("varBoxes");
        var attBoxes = document.getElementById("attBoxes");

        // Clear previous contents of the container
         while (varBoxes.hasChildNodes()) {
            varBoxes.removeChild(varBoxes.lastChild);
        }
        while (attBoxes.hasChildNodes()) {
            attBoxes.removeChild(attBoxes.lastChild);
        }
        attBoxes.appendChild(document.createTextNode("Attribute Name(s)"));

        // For each attribute append an input box inside each variation
        for (k=0;k<attribNumber;k++){              
            var attTitle = attBoxes.appendChild(document.createElement("h2"));
            var attInput = attBoxes.appendChild(document.createElement("input")); 

            attTitle.textContent = "Attribute " + (k + 1);

            attInput.type = "text";
            attInput.name = "v-att" + (k + 1); 
            attBoxes.appendChild(document.createElement("br"));

            };
        attBoxes.appendChild(document.createElement("br"));

        // For each variation create inputs
        for (i=0;i<number;i++){
            varBoxes.appendChild(document.createTextNode("Variation " + (i+1)));

            // Set variables
            var skuTitle = varBoxes.appendChild(document.createElement("h2"));
            var skuInput = document.createElement("input"); 
            var priceTitle = varBoxes.appendChild(document.createElement("h2"));
            var priceInput = document.createElement("input");
            var attributes = varBoxes.appendChild(document.createElement("div"));
            attributes.id = "varAttribs";
            var varAttribs = document.getElementById("varAttribs");

            // Set element values
            skuTitle.textContent = "SKU";

            skuInput.type = "text";
            skuInput.name = "vSku"; 

            priceTitle.textContent = "Price";

            priceInput.type = "number";
            priceInput.id = "vPrice" + (i + 1);
            priceInput.name = "vPrice" + (i + 1);


            // Call elements
            varBoxes.appendChild(skuTitle);
            varBoxes.appendChild(skuInput);
            varBoxes.appendChild(document.createElement("br"));
            varBoxes.appendChild(priceTitle);
            varBoxes.appendChild(priceInput);
            varBoxes.appendChild(document.createElement("br"));

            for (j=0;j<attribNumber;j++){
                var aValueTitle = varAttribs.appendChild(document.createElement("h2"));
                var aValueInput = document.createElement("input");

                aValueTitle.textContent = "Attribute " + (j + 1) + " Value";
                aValueTitle.className = "title";

                aValueInput.type = "text";
                aValueInput.className = "input-box";
                aValueInput.name = "a-value-" + (j + 1);

                varBoxes.appendChild(aValueTitle);
                varBoxes.appendChild(aValueInput);
                varBoxes.appendChild(document.createElement("br"));
                };


            varBoxes.appendChild(document.createElement("br"));
            varBoxes.appendChild(document.createElement("br"));
        }

    }
</script>

1 个答案:

答案 0 :(得分:2)

只需在脚本中替换以下行,您就可以访问每个price元素的值。

发件人

var vPriceInput = form[vPrice];

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Haime Computer Shop</title>
    <link rel="stylesheet" type="text/css" href="index_css.css">
    <script src="src/js/react.min.js"></script>
    <script src="src/js/react-dom.min.js"></script>
    <script src="src/js/browser.min.js"></script>
</head>
<body>

<div class="homeLinks_dcls">
<p><a href="index.html" id="home_id"> Home</a></p>
<p><a href="aboutUs.html" id="aboutUs_id"> About Us</a></p>
<p><a href="services.html" id="services_id"> Services</a></p>
<p><a href="contactUs.html" id="contactUs_id"> Contact us</a></p>
</div>

<div id="container"></div>

<script type="text/babel">
var myReactObj = React.createClass({
  render: function(){
    return (<h2>This is a component!</h2>);
  }
});

ReactDOM.render(<myReactObj/>, document.getElementById('container'));
</script>

</body>
</html>