从选择字段中删除空白选项?

时间:2015-04-24 13:13:54

标签: javascript php html

我有一个相当简单的选择字段,其中包含从数据库(Magento)获取的选项并通过

回显
display:table-cell;

我的问题是,即使服务器端代码阻止空字段,我仍然会得到空的选项字段

我也有这个JavaScript按字母顺序排序我的选项,这会导致我有空白选项吗?

.nav-wizard  {
    display: table; 
    width: 100%; 
}

.nav-wizard > li {
    display:table-cell;
    text-align: left;
}

如何通过JavaScript确保显示下拉选项中没有空白选项?

情况:

我的foreach的数据源不包含空白字段

我获得了与合法选项一样多的空白选项

最终结果源代码如下所示:

enter image description here

8 个答案:

答案 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>";
}

http://ideone.com/h0Wk1T

除非您使用Javascript(onclick / user action)按字母顺序动态排序值,否则我建议您在使用array_filter后使用PHP对组进行排序。减少挫折感并且不依赖于客户端兼容性。

function cmp($a, $b){
    return strcmp($a['label'], $b['label']);
}

usort($groups, 'cmp');

http://ideone.com/OH5vXL

答案 7 :(得分:0)

试试这段代码:

foreach ($groups as $a){

    if(trim($a['label']) != ''){    

        echo "<option value='".$a['value']."'>" . $a['label'] . "<option>";

    }

}