名称从一个元素更改为另一个元素和值存储

时间:2014-07-16 13:30:16

标签: javascript php magento

我需要从li元素中获取名称和值,并在选择后将其显示为按钮值,我需要更多的是将该单个值存储在php var中以供后一次提交,我得到了这么远但是现在我被困住了,只能保持1个尺寸

CODE

<button id="changename" class="btn dropdown-toggle size-selector-btn" type="button" data-toggle="dropdown">Select your size <span class="caret" style="display: none;"></span>
</button>
  <ul class="dropdown-menu size-list" role="menu">
$productAttributeOptions = $product->getTypeInstance(true)->getConfigurableAttributesAsArray($product);
                        $attributeOptions = array();
                        foreach ($productAttributeOptions as $productAttribute) {
                            foreach ($productAttribute['values'] as $attribute) {
                                $attributeOptions[$productAttribute['label']][$attribute['value_index']] = $attribute['store_label'];
                            }
                        }

                        $key = "Size";
                        foreach($attributeOptions[$key] as $size){ ?>

                                 <li id="<?php echo $size; ?>" onclick="changeName()"><?php echo $size; ?></li>
                    <?php    }



                       } ?>

                    </ul>
                </div>
                <script>
                function changeName() {
                    document.getElementById("changename").innerHTML = "<?php echo $size; ?>";
                }
                </script>

1 个答案:

答案 0 :(得分:0)

好的,我可以看到2个问题。第一个,你的第三个foreach循环看起来应该嵌套在其他循环中,但不是。

第二个问题是你误解了php和js是如何工作的。 Php在呈现页面之前在服务器上运行,因此js函数中$ size的值将是LAST值的值。

要解决这个问题,首先正确地嵌套foreach(当使用php内联html时,我发现最好使用块的模板语法 - 例如if: endif;foreach: endforeach;以提高可读性),然后调整你的js函数来获取一个参数,并通过抓取被点击的元素id在onclick事件中传递该参数:

    <button id="changename" class="btn dropdown-toggle size-selector-btn" type="button" data-toggle="dropdown">Select your size <span class="caret" style="display: none;"></span>
    </button>
    <ul class="dropdown-menu size-list" role="menu">
        <?php
        $productAttributeOptions = $product->getTypeInstance(true)->getConfigurableAttributesAsArray($product);
        $attributeOptions = array();
        foreach ($productAttributeOptions as $productAttribute) :
            foreach ($productAttribute['values'] as $attribute) :
                $attributeOptions[$productAttribute['label']][$attribute['value_index']] = $attribute['store_label'];
                $key = "Size";
                foreach($attributeOptions[$key] as $size):?>
                    <li id="<?php echo $size; ?>" onclick="changeName(this.id);"><?php echo $size; ?></li>
                <?php endforeach;
            endforeach;
        endforeach;
        ?>

    </ul>
</div>
<script>
    function changeName(size) {
        document.getElementById("changename").innerHTML = size;
    }
</script>