Проблема с определением установленного по умолчанию атрибута HTML - PullRequest
1 голос
/ 03 мая 2011

Я немного новичок в jQuery.У меня проблемы с работой следующего кода, в частности кнопки сброса:

<script>
$(function() 
{
    $(document).ready(function()
    {
        $("input[type=checkbox][checked]").each(
        function()
        {
            var cell = $(this).closest('td');
            if($(this).attr('checked'))
            {
                cell.toggleClass('check');
            }
        });
    });
    $('#bay :checkbox').click(function() 
    {
        var cell = $(this).closest('td');
        cell.toggleClass('check');
    }).change();
    $('#reset').click(function()
    {   
    $('#bay input[type=checkbox]').each(function()
    {
        var cell = $(this).closest('td');
        if ($(this).is('checked'))
        {
        //alert("yes");
            cell.addClass('check');

        }
        else
        {
            cell.removeClass('check');
        //alert("no");

        }
        });
    });
});
</script>

<input type="checkbox" checked>Blah

По какой-то причине, когда нажимается кнопка сброса, скрипт выполняет только оператор cell.addClass if.По сути, кнопка сброса действует как восстановление и должна удалять добавленный класс #check из каждого, если в HTML-коде нет атрибута по умолчанию.

Я пробовал неэффективный метод проверки флажков вводас проверенным атрибутом и без него, который нормально работал в FF и Chrome, но не работал в IE.Это будет работать, только если вы дважды нажмете кнопку сброса.

$('#reset').click(function()
{   

    $("input[type=checkbox][checked]").each(
    function()
    {
        var cell = $(this).closest('td');
        cell.addClass('check');
    });
    $("input[type=checkbox]:not([checked])").each(
    function()
    {
        var cell = $(this).closest('td');
        cell.removeClass('check');
    });
});

Любая помощь будет принята с благодарностью!

Редактировать: Для каждого запроса приведен примерHTML-кода с рабочим (но НЕЭФФЕКТИВНЫМ) кодом jQuery http://jsfiddle.net/uxjCT/9/.

Edit2: * Я немного упростил часть кода "reset", но он все ещене будет работать в IE.Кто-нибудь знает, если это конкретно проблема IE, которая не может быть решена?По сути, я пытаюсь заставить функцию сброса сбросить к дефолтному атрибуту HTML «флажок» для входных флажков, которые имеют атрибут в HTML, наряду с таблицей стилей.IE - единственный виновник, который сейчас причиняет боль.

$('#reset').click(function(){   

$('#bay input[type=checkbox]').each(function()
{
    var attr = $(this).is("[checked]");
    var cell = $(this).closest('td');

    if (typeof attr !== 'undefined' && attr !== false)
    {
        alert("checked");
        cell.addClass('check');
    }
    else
    {
        alert("unchecked");
        cell.removeClass('check');
    }
    });
});

По какой-то причине var attr = $(this).is("[checked]"); не подхватит атрибут «флажок» в HTML, но поднимет, если флажок имеетотмечен, который может отличаться от атрибута HTML по умолчанию.

Опять же, любая помощь будет принята!

Код демонстрации: http://jsfiddle.net/uxjCT/55/

Ответы [ 3 ]

2 голосов
/ 03 мая 2011

Код для проверки, установлен ли флажок:

$(this).is(':checked')

, а не

$(this).is('checked')

Ваш код работает с этим изменением.

1 голос
/ 03 мая 2011

попробуйте это ...

 $('#reset').click(function(){   

         cell.removeClass('check');//First remove class from all cell
        $('#bay :checked').each(function()
        {
                cell.addClass('check');//add class only to checked cells

        });
    });
1 голос
/ 03 мая 2011

Это должно работать.Немного изменив свой код

$('#reset').click(function(){   
    $('#bay input:checkbox').each(function()
    {
        var cell = $(this).closest('td');

        if (this.checked)
        {
            //alert("yes");
            cell.addClass('check');
        }
        else
        {
            cell.removeClass('check');
            //alert("no");

        }
    });
});

Вы можете попробовать рабочий демо .

...