我有一个相当简单的选择字段,其中包含从数据库(Magento)获取的选项并通过
回显display:table-cell;
我的问题是,即使服务器端代码阻止空字段,我仍然会得到空的选项字段
我也有这个JavaScript按字母顺序排序我的选项,这会导致我有空白选项吗?
.nav-wizard {
display: table;
width: 100%;
}
.nav-wizard > li {
display:table-cell;
text-align: left;
}
如何通过JavaScript确保显示下拉选项中没有空白选项?
情况:
我的foreach的数据源不包含空白字段
我获得了与合法选项一样多的空白选项
最终结果源代码如下所示:
答案 0 :(得分:3)
这应该可以正常工作,你也没有一个结束标记,这在我测试时会引起一些问题。你也不应该每次都在循环中回应。在循环外创建一个变量并回显一次。
$options = '';
foreach ($groups as $a)
{
if(!empty($a['label']))
{
$options .= "<option value='".$a['value']."'>" . $a['label'] . "</option>";
}
}
echo $options;
答案 1 :(得分:0)
尝试使用empty
if(!empty(trim($a['label']))) {
...
一旦你开始研究这个解决方案,你可能也会遇到isset
,这不是你需要的,因为你的isset
if语句会评估为true,即使它是空的字符串。
答案 2 :(得分:0)
使用empty()
也会跳过0
if(!(!isset($a['label']) || $a['label']=='' || !isset($a['value']) || $a['value']=='')) {
//logic here
}
答案 3 :(得分:0)
我认为NULL是一个字符串。试试这个
foreach ($groups as $a){
if($a['label'] != 'NULL'){ //wrap NULL to single quote
echo "<option value='".$a['value']."'>" . $a['label'] . "<option>";
}
}
答案 4 :(得分:0)
如果$a['label']
包含1个以上的空格,则它将不等于NULL或为空。
foreach ($groups as $a) {
$label = trim($a['label']);
$value = trim($a['value']);
if (!empty($label)) {
echo "<option value='$value'>$label<option>";
}
}
答案 5 :(得分:0)
您的数组$groups
可能包含空值,因此请尝试array_filter:
$groups = array_filter($groups);
foreach ($groups as $a) {
...
答案 6 :(得分:0)
我在您的代码中看到的直接问题是您在HTML中混合使用双引号和单引号,并且缺少结束选项标记。
<select id="">
vs <option value=''>
您应该像这样更改PHP输出:
foreach ($groups as $a) {
echo '<option value="'.$a['value'].'">' . $a['label'] . '</option>';
}
我喜欢将array_filter
用于这类事情。它允许您在视图中的附加条件检查之外指定自己的方法。
$groups = array(
array(
'label' => '',
'value' => ''
),
array(
'label' => 'test',
'value' => 'test'
)
);
function validate($var)
{
return !empty($var['label']);
}
$groups = array_filter($groups, 'validate');
foreach ($groups as $a) {
echo "<option value='".$a['value']."'>" . $a['label'] . "<option>";
}
除非您使用Javascript(onclick / user action)按字母顺序动态排序值,否则我建议您在使用array_filter
后使用PHP对组进行排序。减少挫折感并且不依赖于客户端兼容性。
function cmp($a, $b){
return strcmp($a['label'], $b['label']);
}
usort($groups, 'cmp');
答案 7 :(得分:0)
试试这段代码:
foreach ($groups as $a){ if(trim($a['label']) != ''){ echo "<option value='".$a['value']."'>" . $a['label'] . "<option>"; } }