javascript - 对多种表单使用一个 JavaScript 函数

标签 javascript forms dom

我有几个用于产品订单页面的表格。页面上的每个商品都需要有两个价格,一个用于一次性订单,一个用于定期订单。

我的代码工作正常,问题是每个项目都需要三个 javascript 函数,你可以猜到这会很快失控。

这是一种产品的表格:

<form id="mangoForm" action="https://ximo365.foxycart.com/cart" method="post" accept-charset="utf-8">

    <input type="hidden" name="name" value="Mango Bash Pack" />
    <input id="mango-price-input" type="hidden" name="price" value="50" />
    <input id="mango-sub-input" type="hidden" name="sub_frequency" value="1m"> 
    <input id="mango-refBy" type="hidden" name="Referred By:" value="Not Specified">

<div class="btn-group">
    <button type="button" onclick="changePriceLowMango()" class="btn btn-default">Subscribe & Save</button>
    <button type="button" onclick="changePriceHighMango()" class="btn btn-default">One Time</button>
    <button type="button" onclick="mangoSubmit()" class="btn btn-default" value="Submit form">Add To Cart</button>
</div>
</form>

她就是形成 javascript:

function changePriceHighMango() {
   document.getElementById("mango-price").innerHTML = "80.00";
   document.getElementById("mango-price-desc").innerHTML = "Switch to recurring and save up to 35%!";
   document.getElementById("mango-price-input").value = "80.00";
   document.getElementById("mango-sub-input").name = "Frequency";
   document.getElementById("mango-sub-input").value = "Single Order";
}

function changePriceLowMango() {
   document.getElementById("mango-price").innerHTML = "50.00";
   document.getElementById("mango-price-desc").innerHTML = "Recurring Price. Cancel Anytime.";
   document.getElementById("mango-price-input").value = "50.00";
   document.getElementById("mango-sub-input").name = "sub_frequency";
   document.getElementById("mango-sub-input").value = "1m";
}

function mangoSubmit() {
   var mangoName = document.getElementById("distName").innerHTML;
   document.getElementById("mango-refBy").value = mangoName;
   document.getElementById("mangoForm").submit();
}

我想要的是三个函数——一个用于提高价格,一个用于降低价格,一个用于提交表单——这三个函数适用于每个项目。这些功能需要知道要更改哪些表单、最低价格和最高价格是多少,以及要更新该表单上的哪些项目。

这可能吗?

感谢您的帮助。

最佳答案

尝试保留尽可能多的样式和代码,我只是将所有变量作为参数传递给更通用的 changePrice 函数。正如您所说,该函数需要知道要更改哪些表单、最低价格和最高价格是多少,以及要更新该表单上的哪些项目。因此,让我们创建一个更通用的 changePrice 函数,如下所示:

  function changePrice(productName, description, price, subName, subValue) {
    document.getElementById(productName + "-price").innerHTML = price;
    document.getElementById(productName + "-price-desc").innerHTML = description;
    document.getElementById(productName + "-price-input").value = price;
    document.getElementById(productName + "-sub-input").name = subName;
    document.getElementById(productName + "-sub-input").value = subValue;
  }

  function productSubmit(productName) {
    var distName = document.getElementById("distName").innerHTML;
    document.getElementById(productName + "-refBy").value = distName;
    document.getElementById(productName + "Form").submit();
  }

我假设所有表单输入均以 productName 开头,并具有相同的后缀(-price、-price-desc、-price-input、-sub-input 和 -sub-输入)。

然后,您可以通过使用正确的参数调用这些函数来更改按钮 onclick 属性。

  <div class="btn-group">
    <button type="button" onclick="changePrice('mango', 'Recurring Price. Cancel Anytime.', '50.00', 'sub_frequency', '1m')" class="btn btn-default">Subscribe & Save</button>
    <button type="button" onclick="changePrice('mango', 'Switch to recurring and save up to 35%!', '80.00', 'Frequency', 'Single Order')" class="btn btn-default">One Time</button>
    <button type="button" onclick="productSubmit('mango')" class="btn btn-default" value="Submit form">Add To Cart</button>
  </div>

**foo* 产品的表单示例:

<form id="fooForm" action="https://ximo365.foxycart.com/cart" method="post" accept-charset="utf-8">

    <input type="hidden" name="name" value="Foo Bash Pack" />
    <input id="foo-price-input" type="hidden" name="price" value="50" />
    <input id="foo-sub-input" type="hidden" name="sub_frequency" value="1m"> 
    <input id="foo-refBy" type="hidden" name="Referred By:" value="Not Specified">

      <div class="btn-group">
        <button type="button" onclick="changePrice('foo', 'Foo Recurring Price. Cancel Anytime.', '10.00', 'sub_frequency', '1m')" class="btn btn-default">Subscribe & Save</button>
        <button type="button" onclick="changePrice('foo', 'Foo Switch to recurring and save up to 35%!', '20.00', 'Frequency', 'Single Order')" class="btn btn-default">One Time</button>
        <button type="button" onclick="productSubmit('foo')" class="btn btn-default" value="Submit form">Add To Cart</button>
      </div>
</form>

关于javascript - 对多种表单使用一个 JavaScript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26078128/

相关文章:

jQuery clone() 字段未通过

javascript - Angular从缓存中删除页面

javascript - 文本区域字数限制下限

javascript - jquery ui同一页面中多个弹出窗口

javascript - 在开发模式下向屏幕显示客户端错误

javascript - document.execCommand ('copy' ) 命令在字符串的开头和结尾添加换行符

php - 使用 PHP DOM 将 PostgreSQL 查询结果转换为 XML

javascript - Angular 1.4.7 ngModel.NgModelController.$parsers不调用函数

javascript - 获取 anchor 内的文本值,但不获取其他 html 元素

css - rails 4 : how to apply custom CSS to Rails form file field