【问题标题】:Return different content based on multiple select inputs根据多个选择输入返回不同的内容
【发布时间】:2019-04-17 03:01:41
【问题描述】:

所以基本上我试图根据多个选择输入显示不同的价格。价格使用高级自定义字段存储在 WordPress 中,但这只是一个细节,除非它可以通过 AFC 完成。

<select>
 <option>12 months</option>
 <option>24 months</option>
 <option>36 months</option>
</select>

<select>
 <option>1000 deposit</option>
 <option>2000 deposit</option>
 <option>3000 deposit</option>
</select>

* if 12 months and 2000 deposit are selected Show a dynamic price and so on *

最好的方法是什么?我见过很多单一选择输入的例子,但没有看到各种输入。谢谢!

【问题讨论】:

    标签: javascript php select advanced-custom-fields


    【解决方案1】:

    您可以使用 JavaScript 通过向每个选择元素添加事件侦听器然后调用函数来根据用户选择计算输出来实现此目的。在下面的示例中,我只是在输入元素中显示结果。代码看起来像这样。

    let select1 = document.getElementById("select1");
    //add eventListener to call calculation function on change of first select
    select1.addEventListener("change", () => {
    	calculate( select1.value, document.getElementById("select2").value );
    });
    
    let select2 = document.getElementById("select2");
    //add eventListener to call calculation function on change of second select
    document.getElementById("select2").addEventListener("change", () => {
    	calculate( document.getElementById("select1").value, select2.value );
    });
    
       
    
    //calculate result and display it in an input box
    function calculate( val1, val2 ){
    	//possibility 1
      if ( parseInt( val1 ) === 12 && parseInt( val2 ) === 1000 ) {
      	//assign some value to something you want
    	document.getElementById("result").value = "$150.25";
      } else if ( parseInt( val1 ) === 12 && parseInt( val2 ) === 2000 ) {
      	document.getElementById("result").value = "$50.25";
      } else if ( parseInt( val1 ) === 12 && parseInt( val2 ) === 3000 ) {
      	document.getElementById("result").value = "$10.25";
      }
      //.......and so on with the rest of possibilities
    }
    <select id="select1">
     <option value="12">12 months</option>
     <option value="24">24 months</option>
     <option value="36">36 months</option>
    </select>
    
    <select id="select2">
     <option value="1000">1000 deposit</option>
     <option value="2000">2000 deposit</option>
     <option value="3000">3000 deposit</option>
    </select>
    
    <input type="text" id="result">

    可能不是最优雅的方式,但它可以完成工作。

    【讨论】:

    • 非常感谢。类似于我需要的。我真正需要的是当两个条件为真时。例如,如果他们选择 12 个月和 2000 年的押金,那么它会显示我选择的价值……假设我希望它显示 230.75 英镑……对于 10 种不同的预定价格,我该怎么做?
    • 如果我理解正确,那么您可以通过设置大量 if 条件或开关来根据用户选择分配特定值来实现此目的。例如 if ( val1 === 2000 && val2 === 12 ) { //在此处设置值 }
    • 听起来不错,但尝试在我的网站上复制您的解决方案时遇到此控制台错误并且输入未填充,再次感谢 selects.js:3 Uncaught TypeError: Cannot read property 'addEventListener'在 selects.js:3(匿名)@selects.js:3 处为 null
    • 似乎您尝试添加事件侦听器的选择在您尝试添加它时确实存在,或者您可能输入了错误的内容。如果不知道您正在尝试如何做事,就很难诊断出确切的问题。您是通过 WordPress 插件或主题或其他方式添加 JavaScript 吗?
    • 我在我的 js 文件夹中创建了一个新的 js 文件,在我的头上引用它并将选择放在我的主页模板中,我将在回复中附上一些图片...再次感谢
    【解决方案2】:

    下面的链接....这是我可以显示图像的唯一方法,因为我是新手,希望这样可以吗?

    https://ibb.co/mSYyzf
    https://ibb.co/bRT95L
    https://ibb.co/ds72QL
    https://ibb.co/nGAdzf
    

    【讨论】:

    • 您的脚本似乎在创建标记之前正在运行。您可以尝试包装引用标记的代码,以便仅在脚本和页面完全加载后触发。包含 select 和 addEventListener 代码的两个变量应该放在 document.window.onload = function() { //code goes here } 中。这应该确保您的 html 代码可以被 JavaScript 抓取。
    • @BambiOurLord 还有一件事。我正在努力使用 switch 和 if else statemtents 来使用 2 个选择...如果我有 4 个设定的价格....比如说 110 英镑、120 英镑、130 英镑、150 英镑....如果我从选项 1 中选择首先选择第二个选项3,我想显示130英镑,依此类推...我在wordpress后端设置了我需要的值的自定义字段我只需要逻辑,因为我无法解决。我将根据需要设置尽可能多的变化。谢谢你:)
    • 因为睡觉,回复有点晚。要在该计算函数中实现这一点,您必须检查您传递给它的两个值,并根据该值给出结果。所以它可能看起来像这样 if ( val1 === 12 && val2 === 2000 ) { //在这里为输出设置价格 } 然后根据需要添加尽可能多的选项。来自 select 的值可能是字符串,因此您可能必须在比较之前使用 val1.toInt 将它们强制为整数,或者在 if 语句中将数字包裹在双引号中。如果我有帮助,请不要忘记将我的答案标记为正确,祝你好运!
    • 我的错我的意思是 parseInt(val1);如果您想在比较期间更改其数据类型。
    • @BambiOurLord 你是一个巨大的 heml,如果你能告诉我和例子,那就太好了。如果我没有直观地看到示例,我将难以理解。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多