【问题标题】:Pass and update php variable into javascript将 php 变量传递并更新到 javascript
【发布时间】:2012-08-30 03:04:38
【问题描述】:

有没有办法可以将 php 选项值变量 $option_value['price'] 作为字符串传递到 javascript 中,然后每次选择不同的选项时,javascript 都会使用新值“更新”字符串。我试过 onchange() 但一定做错了什么。我确定我的错误是因为 php 是服务器端而 javascript 是客户端,但我不知道如何让两者按照我的意愿行事。

<?php if ($options) { ?>
    <?php foreach ($options as $option) { ?>
    <?php if ($option['type'] == 'select') { ?>
    <span id="option-<?php echo $option['product_option_id']; ?>" class="option">

<select name="option[<?php echo $option['product_option_id']; ?>]" onchange="getIt(this)">
        <?php foreach ($option['option_value'] as $option_value) { ?>
        <option value="<?php echo $option_value['product_option_value_id']; ?>"><?php echo $option_value['name']; ?>
        <?php if ($option_value['price']) { ?>
        <?php $option_value['price']; ?>
        <?php } ?>
        </option>
        <?php } ?>
      </select>
</span>

我试过了:

<script type="text/javascript"> 
function getIt(elm) {
var val = elm.options[elm.selectedIndex].text;
window.alert(val);
}
</script>

<script type="text/javascript">
function getIt() {
var val = "<?php $option_value['price']; ?>";
window.alert(val);
}
</script>

【问题讨论】:

  • onchange 对我来说是正确的:jsfiddle.net/NYJUm。你在哪里添加getIt 函数?
  • 在代码的底部。我遇到了问题,因为 php 变量在数组中。 &lt;option&gt;A&lt;/option&gt; &lt;option&gt;B&lt;/option&gt; &lt;option&gt;C&lt;/option&gt;能看懂,&lt;option&gt;&lt;?php $arrayVariable ?&gt;&lt;/option&gt;看不懂

标签: php javascript variables option


【解决方案1】:

这是一个示例,您可以如何做到这一点。你需要做的是:

  1. 分析代码(请注意,我使用的是 google 帐户中的 jquery。您有时需要在您的网站上安装 jquery 并使用这个而不是 google 的那个。
  2. 构建您的 fruits 数组,使其看起来像示例中的那样。

我已经准备好页面,将在这里向您展示这个工作:http://jsfiddle.net/7uudp/

下面是它包含的内容。请注意,此示例不使用您的变量。您将需要以您想要/需要的方式使用它们。我还定义了entry_fruit 来向您展示如何选择要选择的默认选项。希望它会有所帮助。

<html>
<head>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script type="text/javascript">

fruits = [{n:"apple",p:1},{"n":"strawbery",p:3}];
entry_fruit="strawbery";

function build_select(select,list,which)
{
    $.each( list, function(i,v){
         var selopt="" ;
         if ( v.n == which ) selopt="selected" ;
         $(select).append("<option "+selopt+" value="+i+">"+v.n+" - $"+v.p+"</option>");
     }) ;
}

$(document).ready(function(){
    build_select($("select[name=fruits]"),fruits,entry_fruit);
     $("select[name=fruits]").change(function(){
         alert("Price is $" + fruits[$(this).val()].p);
     }) ;
})

</script>
</head>
<body>
<select name="fruits"></select>
</body>
</html>

【讨论】:

  • 所以我现在的任务是想办法让我的php代码变成水果,对吧?
  • 是的。这就像(我无法格式化它;(所以我在每个新行之后都放了 NL)fruits=[ NL NL ]; NL
  • 这是否正确:$option_value['product_option_value_id'] 与 n 相同。 $option_value['name'] 与苹果/草莓相同。而$option_value['price'] 和 p:1,2,.... 一样吗?
  • @Travis:我真的不知道。您不需要在数组中保留对象的结构。您可以更改字段“n”、“p”等。一般来说,您至少有 四种 类型的数据 - id (product_option_value_id)、价格 (price) 和名称 (name)。还有product_option_id whichproduct_option_value_id 不同。它们可能是由product_option_id 表示的每个产品可以具有由product_option_value_id 表示的不同值。或者你的代码中有错字。
【解决方案2】:
<script type="text/javascript">
function getIt() {
var val = "<?php echo $option_value['price']; ?>";
window.alert(val);
}
</script>

像这样?在我看来你只是忘记了“回声”。

编辑-

<script type="text/javascript">
var val = "<?php echo $option_value['price']; ?>"; 
function getIt(elm) {
    val = elm.options[elm.selectedIndex].text;
    window.alert(val);
}
</script>

【讨论】:

  • 在上面编辑过,试试类似的方法?
  • 这会提醒 $option_value['product_option_value_id']。 .text 抓取回显的内容。因为 option_value['price'] 没有回显,所以它没有做任何事情。
【解决方案3】:

好的,撤销我之前的条目。

您需要做的是在匹配option_value['price'] 时将selected 关键字添加到您的&lt;option&gt; 元素中

现在您需要以稍微不同的方式排列您的数据。 在您的 javascript 中,准备一个将 $option_value['product_option_value_id'] 映射到 $option_value['price']; 的数组。当您构建您的&lt;select&gt; 时,请检查每个$option_value['product_option_value_id'] 的价格是否与最初从 php 提供的价格相匹配。

您的 getIt 将简单地获取 &lt;option value="___"&gt; 值,在该地图中找到它,然后使用 alert() 窗口将其显示给用户。

【讨论】:

  • 远远超过我。我正在更改 opencart 代码...所以您所说的大部分内容对我来说都是希腊语...无论如何,我似乎需要首先尝试找到一种方法来选择一个选项作为开始。我会看看我能做什么然后我会回来做更多。谢谢。
  • 事实证明我的想法太过分了。关于如何开始的任何帮助?
猜你喜欢
  • 2011-07-14
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多