javascript
  • php
  • html
  • 2015-04-24 2 views 3 likes 
    3

    У меня есть довольно простое поле выбора с параметрами, извлекаемых из базы данных (Magento) и отражаемых черезУдалить пустые опции из поля выбора?

    foreach ($groups as $a){ 
    
        if($a['label'] != NULL){  
    
         echo "<option value='".$a['value']."'>" . $a['label'] . "<option>"; 
    
        } 
    
    } 
    

    Моей проблемы заключается в том, что даже с серверным кодом предотвращения нулевых полей, я все еще получаю пустые поля

    У меня также есть этот JavaScript для сортировки моих опций по алфавиту, может ли это иметь пустые опции?

          function sortlist() 
              { 
               var cl = document.getElementById('group_id'); 
               var clTexts = new Array(); 
    
               for(i = 2; i < cl.length; i++) 
               { 
                clTexts[i-2] = 
                 cl.options[i].text.toUpperCase() + "," + 
                 cl.options[i].text + "," + 
                 cl.options[i].value; 
               } 
    
               clTexts.sort(); 
    
               for(i = 2; i < cl.length; i++) 
               { 
                var parts = clTexts[i-2].split(','); 
    
                cl.options[i].text = parts[1]; 
                cl.options[i].value = parts[2]; 
               } 
              } 
    
    
              sortlist(); 
    

    Как можно обеспечить с JavaScript, что не отображаются пустые опции в раскрывающемся списке выберите?

    Частности: источник

    данных для моего Еогеасп не содержит пустых полей

    Я получаю столько пустых вариантов в качестве законных вариантов

    Конечный источник результирующий код выглядит следующим образом:

    enter image description here

    +2

    Вы пробовали 'если (пусто ($ а [ 'метка'])!)'? –

    +0

    Лучше использовать if ($ a ['label']! = NULL && $ a ['label']! = '') Вместо передачи на JS –

    +0

    Возможно. if ($ a ['label']! = '') – BCM

    ответ

    3

    Это должно работать нормально, и вы не имеете закрывающий тег, который вызывает некоторые проблемы, когда я тестировал. Вы также не должны повторяться каждый раз в цикле. создайте переменную и echo за пределами цикла.

    $options = ''; 
    foreach ($groups as $a) 
    { 
        if(!empty($a['label'])) 
        { 
         $options .= "<option value='".$a['value']."'>" . $a['label'] . "</option>"; 
        } 
    } 
    echo $options; 
    
    +0

    '! = ''' И '! = NULL' - это то же самое. http://php.net/manual/en/types.comparisons.php Также вы никогда не должны использовать '! = ''' или '! = NULL' в многомерном индексе массива, если он эквивалентен использованию' empty () ', за исключением того, что empty также проверяет' isset() ', чтобы предотвратить неизвестную ошибку индекса. EG: '! Empty ($ a ['label'])' такой же, как 'isset ($ a ['label']) && $ a ['label']! = ''' – fyrye

    +0

    Спасибо за исправление, downvote. – fyrye

    +1

    Yikes, спасибо за улов! Вы правы, извините, я вставил неправильную версию своего кода. Я создал небольшой тест, чтобы убедиться, что это сработает! – Eko3alpha

    0

    Попробуйте с empty

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

    После того, как вы будете смотреть в это решение, вы можете также встретить isset, который не совсем то, что вам нужно, так как ваш, если заявление с isset будет вычисляться так, даже если это пустая строка.

    +0

    Это не работает. Тот же результат, что и ($ a ['label']!= NULL) – zak

    +0

    Вы проверили, что именно является содержимым '$ a ['label']', когда оно выглядит пустым и в то же время оно не является нулевым? – leopik

    0

    Использование empty() пропустит 0 также

    if(!(!isset($a['label']) || $a['label']=='' || !isset($a['value']) || $a['value']=='')) { 
          //logic here 
    } 
    
    +0

    Тот же результат, что и раньше. Я считаю, что эта проблема должна быть вызвана серверной стороной – zak

    +0

    @zak Не могли бы вы получить некоторые данные из '$ groups' – Parixit

    0

    Я думаю, что NULL приходит в виде строки. попробуйте это

    foreach ($groups as $a){ 
    
    if($a['label'] != 'NULL'){ //wrap NULL to single quote 
    
        echo "<option value='".$a['value']."'>" . $a['label'] . "<option>"; 
    
    } 
    
    } 
    
    +0

    Несомненно, что это будет работать только тогда, когда возвращенная строка на самом деле является строкой« NULL »? – zak

    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>"; 
        } 
    } 
    
    +0

    Нет $ a ['label'], которые являются NULL, проблема на стороне клиента – zak

    0

    Вероятно, ваш массив $groups приходит с пустыми значениями, так что попробуйте array_filter:

    $groups = array_filter($groups); 
    foreach ($groups as $a) { 
    ... 
    
    +1

    'array_filter' не будет работать рекурсивно в многомерном массиве, необходимо добавить настраиваемую функцию для проверки дочерних массивов. См.: Http://ideone.com/Mkr1kt – fyrye

    +0

    Красивый вид! +1 @fyrye –

    0

    Непосредственная проблема, которую я вижу с кодом вы смешиваете двойные и одинарные кавычки в HTML и отсутствуете закрытие флажок опции. <select id=""> против <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/действия пользователя) Я предлагаю вам отсортировать группы с PHP после использования array_filter. Гораздо меньше разочарований и не зависит от совместимости на стороне клиента.

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

    http://ideone.com/OH5vXL

    0

    Попробуйте этот код:

    foreach ($groups as $a){ 
    
        if(trim($a['label']) != ''){  
    
         echo "<option value='".$a['value']."'>" . $a['label'] . "<option>"; 
    
        } 
    
    } 
    
    +0

    Зачем это работать? – zak

    Смежные вопросы