选择不起作用的标签

时间:2016-12-19 16:27:28

标签: php html json forms select

我最近在一个网站上工作,我必须能够使用PHP动态地在select标签中创建选项。在所有主流浏览器中,当我点击选择表单时,它会显示一个轻微的点击动画,但不会打开菜单。可以在https://wilsonandsonproductions.com/buy.php?id=0&mode=client找到一个实例。 PHP似乎确实创建了正确的标签,所以我不确定我在哪里弄错了。这是一些源代码:

<select name="opt" id="opt">
  <label>Select a  size:</label>
  <optgroup label="Metal Print with Wall Mount">
    <!-- Metal prints in form 0e1, w/ 0 as id & 1 as selected option -->
    <?php foreach($pdata["metal"] as $opt){$o=array_search($opt,$pdata["metal"]); echo '<option value="e'.$o.'">'.$opt["label"].' ($'.$opt["price"].')</option>';} ?>
  </optgroup>
  <optgroup label="Traditional Matted Print">
    <!-- Traditionl Matted prints in form 0a1, w/ 0 as id & 1 as selected option -->
    <?php foreach($pdata["matted"] as $opt){$o=array_search($opt,$pdata["metal"]); echo '<option value="a'.$o.'">'.$opt["label"].' ($'.$opt["price"].')</option>';} ?>
  </optgroup>
</select>

变量$ pdata从json文件加载,包含在这里:

{
"metal" : [
    {
        "label" : "8x10",
        "price" : 75
    },
    {
        "label" : "8x12",
        "price" : 85
    },
    {
        "label" : "8.5x11",
        "price" : 95
    },
    {
        "label" : "10x14",
        "price" : 115
    }
],
"matted" : [
    {
        "label" : "5x7 print inside 8x10 mat",
        "price" : 50
    }
]
}

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您似乎更新了HTML以包含带有标签属性的 optgroup 标记,而不是标签标记。这很好,因为select标签只能包含选项 optgroup 标签。

  

允许的内容:零个或多个<option><optgroup>元素。 1

您的javascript点击处理程序正在停止所有点击的默认行为(左侧和右侧按钮),因为它在第一行中调用了preventDefault()

function rtclickcheck(keyp){ 
    keyp.preventDefault();

除非用于所有鼠标点击,否则可以调用。您可以使用oncontextmenu事件处理程序代替 onmousedown 。所以这一行:

document.onmousedown = rtclickcheck;

可以更改为:

window.oncontextmenu  = rtclickcheck;    

如果不需要支持IE 8或更早版本,可以使用addEventListener()这种技术,这更像是event delegation模式:

window.addEventListener('contextmenu', rtclickcheck, false);

您可以在this jsFiddle中看到它。