【问题标题】:Javascript select, get value from nameJavascript选择,从名称中获取值
【发布时间】:2014-01-04 09:46:09
【问题描述】:

我正在为订单表单构建动态下拉菜单以获取其他选项。选择这些选项后,会增加动态金额的值。下拉菜单的组织方式如下:

<option value=" . $name . ">" . $name . "</option>

这是通过 php,然后我只是回应它。我不知道如何做的是目前我的 javascript 被设置为通过选项值确定增加多少值,这让我查看数据库中的数字并且不知道他们订购了什么。所以我想做的是让 php 回显类似:&lt;option value="Test"&gt; Test - $10 &lt;/option&gt;,我可以在其中使用 javascript 剪切 10 并将其添加到总数中。这是用于多个下拉菜单,目前我的 javascript 是:

function getDDValue(elementID) {
    var element = document.getElementById(elementID);
    var value;
    // if the element exists
    if (element) {
        value = element.options[element.selectedIndex].value;
    } else {
        value = 0;
    }
    console.log(value);
    return parseFloat(value);
}

function getBase() {
    var value = 0;
    var element = document.getElementById('base_cost');
    value = element.value;
    return parseFloat(value);
}

function getTotal() {
    var optA = getDDValue("optA");
    var quantity = getDDValue("quantity");
    var optB = getDDValue("optB");
    var optC = getDDValue("optC");
    var base_cost = getBase("base_cost")
    var totalPrice = '0';
    totalPrice = parseFloat((+base_cost + +optA + +optB + +optC) * +quantity);
    console.log(totalPrice);
    document.getElementById('totalPrice').innerHTML = "<?php echo $name; ?> $" + totalPrice;
}
getTotal();

我会发布我尝试过的内容,但我什至不确定从哪里开始,而且我确信这已经完成,然后我必须在我的搜索中向谷歌询问错误的问题,所以我还没有找到这方面的任何资源。对于实现这一目标的最佳方式的任何帮助,我们将不胜感激。谢谢!

【问题讨论】:

  • 为什么不能直接放在值里面?我不知道您所说的“这让我查看数据库中的数字却不知道他们点了什么”。
  • 因为将有 3 个动态选择可能与任何选项相关,例如尺寸、颜色、形状等。如果我只看到 15,我不知道它们是否变得更大大小、不同的颜色等。我需要将值作为示例中的字符串传递给 mysql:4oz 但这不允许 javascript 只更新值(我不能将 4 盎司添加到 100 美元)。
  • 这就是数组的用途。做&lt;option value="size[10]"&gt;Test - 10&lt;/option&gt;,然后在PHP中这将是$_REQUEST['size'][10]
  • 我会看看这个,给我几分钟。感谢您的回复!

标签: javascript php forms


【解决方案1】:

您没有正确使用字段,使用&lt;select&gt; 输入的最佳方法是:

    <select name="Test" id="Test" onChange="getTotal(); or any function">
     <option value="10">Test - 10</option>
    </select>

满足您当前的需求:

如果你使用的是 JQuery,你可以用“-”分割文本,然后像 $(secondPart).replace(/[^\d.]/g, ""); 这样过滤第二部分,只得到一个有效的数字。

【讨论】:

  • 我知道如何使用输入,我需要帮助的是将值设置为文本,以便我知道他们在订购什么,但使用 javascript 将选项标签之间的 10 剪掉并添加它在用户端的总数。
  • 我再举一个例子来满足你当前的需要
【解决方案2】:

您可以使用自定义属性。

<option value="Test" data-price="10">Test - $10</option>

像这样在 JavaScript 中获取价格:

parseFloat(element.options[element.selectedIndex].getAttribute("data-price"));

您似乎也在使用getDDValue() 来读取所选数量。确保你留下getDDValue(),这样你就不会破坏数量,并创建一个新函数来获取期权价格。

演示:jsfiddle.net/BDGWR/1

顺便说一句,使用 jQuery 确实可以减少您必须编写的代码量,并且在需要 unobtrusive design 时尤其有用,就像您的情况一样。

jQuery 演示:jsfiddle.net/BDGWR/2

【讨论】:

  • 这看起来不错,让我试一试,然后回复你。谢谢!
  • 这似乎是合乎逻辑的,但它给我的结果是 NaN 虽然在 html 中它显示为一个数字。控制台中也没有显示任何问题。有任何想法吗?我现在正在调试它。
  • 我认为正在发生的事情是它实际上是把 data-price 作为价值而不是获取 data-price 的价值
  • 嗯。我在代码中的处理方式一定有错误,我将其添加到 getDDvalue 函数中的 if 条件中:if(element){ value = parseFloat(element.options[element.selectedIndex].getAttribute("data-price")); }else{ value = 0; } 抱歉,复制了我所做的更改,这是之前的更改。
  • @user3070011 - 你的 HTML 是什么样的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
  • 2018-01-06
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
相关资源
最近更新 更多