我最近在一个网站上工作,我必须能够使用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
}
]
}
非常感谢任何帮助!
答案 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中看到它。