Флажок и JQUERY: «проверено» всегда ЛОЖЬ - PullRequest
17 голосов
/ 15 мая 2009

Код ниже и флажок всегда ЛОЖЬ. Но на странице все иначе. Не проверяется и не проверяется.

<script type="text/javascript">
 $('.cbOzelHastaAdi').unbind('click');

 $('.cbOzelHastaAdi').click( function() {

    var parentDiv = $(this).parent().get(0);
    var cbs = $(parentDiv).find('table input:checkbox');

   if($(this).attr("checked") === "true") {
        cbs.each(function() { $(this).attr('checked', false); });
    }
    else{
        cbs.each(function() { $(this).attr('checked', true); });
    }

})

</script>

Ответы [ 8 ]

37 голосов
/ 15 мая 2009

Одна из проблем состояла в том, что у вас был атрибут checked на промежутке, окружающий верхний флажок и метку, и вы привязывали обработчик событий к промежутку, поэтому checked всегда останется checked на промежутке.

Вместо этого я переместил обработчики событий в флажок и немного исправил код. Хотя я не верю, что существует проблема в создании ваших собственных атрибутов для элементов HTML, то есть проверенного атрибута в элементе span (я думаю, что строгая проверка XHTML с ними не удалась), я не знаю, считается ли это хорошей практикой.

Я вижу, что вы используете ASP.NET, основываясь на искажении идентификатора - вы можете использовать сторону сервера <%= myControl.ClientID %>, чтобы получить искаженный идентификатор для рендеринга в HTML, отправленном клиенту.

Рабочий пример здесь

   $(function() {     
        $('#rptOzel_ctl00_rptOzelHastalar_ctl00_cbOzelKurumHastasi').unbind('click');
        $('#rptOzel_ctl00_rptOzelHastalar_ctl00_cbOzelKurumHastasi').click( function() {

           var cbs = $('table input:checkbox');  

           if($(this).is(':checked')){
               cbs.each(function() { $(this).attr('checked', true); });
           }
           else{
            cbs.each(function() { $(this).attr('checked', false); });
           }

        });
    });

EDIT:

В ответ на ваш комментарий у вас есть несколько вариантов разрешения клиентуры. Если вы напишите свой jQuery на странице aspx, то вы можете просто использовать

$('#<%= cbOzelKurumHastasi.ClientID %>')

вместо

$('#rptOzel_ctl00_rptOzelHastalar_ctl00_cbOzelKurumHastasi')

Если у вас есть jQuery во внешнем файле скрипта, вы можете поместить его на страницу aspx

<script type="text/javascript">
var cbOzelKurumHastasi = '#<%= cbOzelKurumHastasi.ClientID %>';
</script>

и затем используйте переменную в вашем внешнем файле сценария

$(function() {     
            $(cbOzelKurumHastasi).unbind('click');
            $(cbOzelKurumHastasi).click( function() { ...

Для других вариантов взгляните на этот вопрос и ответ - Как остановить ASP.NET от изменения идентификаторов для использования jQuery

7 голосов
/ 15 мая 2009

Я обычно использую функциональность .is () jQuery, чтобы проверить это

$('.cbOzelHastaAdi').click( function() {
  if($(this).is(':checked')){
    ...
  }else{
    ...
  }
})
3 голосов
/ 15 мая 2009

Может ли это быть потому, что вы сравниваете значение свойства selected со строкой, а не с логическим значением, и используете оператор ===, который сравнивает и значение, и тип?

1 голос
/ 23 августа 2011

я сталкивался с такими же проблемными; проверка, установлен ли флажок (любым другим способом), всегда возвращает false.

Мое решение (ход проблемы) было в селекторе JQuery, который использовался.

uzay95 использовал селектор класса ".", Чтобы установить его флажки.

$ ( 'cbOzelHastaAdi') **

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

Как только вы установите флажок по идентификатору, вы сможете оценить его атрибут «флажок».

0 голосов
/ 26 августа 2013

Это также работает:

(($('input[name="myCheckBox"]:checked').val())=='on')

Возвращает либо true, либо false

, где флажок определен как:

<input type="checkbox" name="myCheckBox">
0 голосов
/ 26 января 2010

=== - это безопасный тип компаратора для JS

См: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Comparison_Operators

0 голосов
/ 15 мая 2009

Ответ Russ Cam работает, но почему бы jQueryify еще немного?

$(function() {     
    $('.cbOzelHastaAdi').live('click', function() {
        $(this).parents('div').find('table input:checkbox').attr('checked', $(this).attr('checked'));
    });
});

Предполагается, что класс cbOzelHastaAdi теперь прикреплен к флажку вместо элемента span. Это должно позволить вам избежать беспорядочного переименования ASP и разрешить создание нескольких похожих таблиц на странице без необходимости использования нескольких событий щелчка.

0 голосов
/ 15 мая 2009

Я обнаружил, что, вероятно, лучший способ определить статус в jQuery:

var cbs = $(parentDiv).find('table input:checkbox:checked');

Это даст вам массив каждого проверенного ввода.

Это в основном из документации по jQuery:

Искатели / Проверено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...