jQuery Mobile - Фильтрация списка просмотра флажков приводит к появлению неустановленных флажков

Долгое время читатель и первый постер здесь, несколько новый для jQuery/jQM.

У меня есть форма, содержащая ListView с фильтром данных, где каждый элемент списка содержит флажок. Когда я набираю текст в поле фильтра и элементы фильтруются, дополнительные необработанные флажки появляются на заднем плане. Вот пример кода:

<div data-role="content">  
    <ul data-role="listview">
        <fieldset data-role="controlgroup" id="myGroup" data-filter="true" data-icon="false">                
            <li>
                <input type="checkbox" 
                name="itemIds" 
                id="228"/>   
                <label for="228">
                    Orange
                </label>
            </li>   
            <li>
                <input type="checkbox" 
                name="itemIds" 
                id="70"/>   
                <label for="70">
                    Red
                </label>
            </li>    
            <li>
                <input type="checkbox" 
                name="itemIds" 
                id="71"/>   
                <label for="71">
                    Blue
                </label>
            </li>                

            <li>
                <input type="checkbox" 
                name="itemIds" 
                id="72"/>   
                <label for="72">
                    Purple
                </label>
            </li>                  
        </fieldset>
    </ul>
</div>

Сначала я думал, что проблема была в том, как я динамически генерировал список (то есть я думал, что я получаю дублирующиеся флажки, потому что флажки без стилей соответствуют элементам в моем списке), но я смог воспроизвести проблему с помощью простого Пример кода выше в jsfiddle: http://jsfiddle.net/KsRb2/2/

Любая помощь приветствуется. Спасибо!

3 ответа

Решение

Это поведение является ошибкой в ​​jQM 1.4.0 alpha 2. Вы должны обновить до 1.4.0 RC1, а также удалить теги ul и li, потому что этот список должен быть только списком или контрольной группой, он не может быть и тем, и другим. Это будет последний HTML:

<div data-role="content">  
    <fieldset data-role="controlgroup" id="myGroup" data-filter="true" data-icon="false">                
        <input type="checkbox" 
            name="itemIds" 
            id="228"/>   
        <label for="228">
            Orange
        </label>
        <input type="checkbox" 
            name="itemIds" 
            id="70"/>   
        <label for="70">
            Red
        </label>
        <input type="checkbox" 
            name="itemIds" 
            id="71"/>   
        <label for="71">
            Blue
        </label>

        <input type="checkbox" 
            name="itemIds" 
            id="72"/>   
        <label for="72">
            Purple
        </label>
    </fieldset>
</div>

Вы можете попробовать это здесь в скрипке: http://jsfiddle.net/KsRb2/5/

На самом деле, вам просто нужно добавить data-filter-reve ="true" в набор полей. Не нужно использовать CSS.

jQM создает свой собственный стилизованный флажок, но сохраняет оригинальный элемент INPUT в DOM. Это раскрывается, когда вы фильтруете. Следующий CSS скрывает эти элементы:

li .ui-checkbox input{
    visibility: hidden;
}

Вот ваша обновленная скрипка: http://jsfiddle.net/ezanker/KsRb2/4/

Другие вопросы по тегам