Флажок и JQUERY: "проверено" всегда FALSE
Код ниже и флажок всегда FALSE. Но на странице это другое. Он не проверяется или не проверяется.
<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>
Ответы
Ответ 1
Одна из проблем заключалась в том, что у вас был атрибут checked
на промежутке, окружающем верхний флажок и метку, и привязывал обработчик событий к диапазону, поэтому checked
всегда будет оставаться checked
на пролете.
Я переместил обработчики событий в этот флажок и немного прибрал код. Хотя я не верю, что есть проблема в создании ваших собственных атрибутов на элементах HTML, то есть на проверенном атрибуте на элементе span (я думаю, что с ними происходит строгая проверка XHTML), я не считаю, что это хорошая практика.
Я вижу, что вы используете ASP.NET на основе искажения ID - вы можете использовать серверную сторону <%= 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:
В ответ на ваш комментарий у вас есть несколько вариантов решения clientid. Если вы пишете jQuery на странице aspx, вы можете просто использовать
$('#<%= cbOzelKurumHastasi.ClientID %>')
вместо
$('#rptOzel_ctl00_rptOzelHastalar_ctl00_cbOzelKurumHastasi')
Если у вас есть jQuery во внешнем файле script, вы можете поместить его на страницу aspx
<script type="text/javascript">
var cbOzelKurumHastasi = '#<%= cbOzelKurumHastasi.ClientID %>';
</script>
а затем используйте переменную во внешнем файле script
$(function() {
$(cbOzelKurumHastasi).unbind('click');
$(cbOzelKurumHastasi).click( function() { ...
Для других вариантов взгляните на этот вопрос и ответ - Как остановить ASP.NET от изменения идентификаторов, чтобы использовать jQuery
Ответ 2
Я обычно использую функцию .is() jQuery для проверки этого
$('.cbOzelHastaAdi').click( function() {
if($(this).is(':checked')){
...
}else{
...
}
})
Ответ 3
может быть, потому что вы сравниваете значение проверяемого свойства с строкой, а не с логическим, и используя оператор ===, который сравнивает значение и тип?
Ответ 4
Я столкнулся с теми же проблемами; проверяя, установлен ли флажок (любым из разных способов), всегда возвращается false.
Мое решение (курс проблемы) находилось в используемом селекторе JQuery.
uzay95 использовал селектор классов ".", чтобы выбрать его флажки.
$( 'cbOzelHastaAdi') **
Возвращает набор результатов. Поэтому проверка того, проверена ли она, недействительна, потому что они могут быть несколько флажков... Я знаю, что он использовал ключевое слово this в своем коде, но для меня это также не устранило проблему.
Как только вы установите флажок по идентификатору, вы можете оценить его атрибут "checked".
Ответ 5
Я обнаружил, что, вероятно, лучший способ определить статус проверки в jQuery:
var cbs = $(parentDiv).find('table input:checkbox:checked');
Это даст вам массив каждого входного файла, который был проверен.
Это в основном из документов jQuery:
Selectors/Checked
Ответ 6
Ответ на рассылку Russ Cam, но почему бы не jQueryify его еще?
$(function() {
$('.cbOzelHastaAdi').live('click', function() {
$(this).parents('div').find('table input:checkbox').attr('checked', $(this).attr('checked'));
});
});
Это предполагает, что класс cbOzelHastaAdi теперь привязан к флажку вместо элемента span. Это должно позволить вам избежать всех беспорядочных переименований ASP и разрешить несколько похожих таблиц на страницу без необходимости в нескольких функциях событий щелчка.
Ответ 7
=== является безопасным компаратором типа для JS
См:
https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Comparison_Operators
Ответ 8
Это также работает:
(($('input[name="myCheckBox"]:checked').val())=='on')
Он вернет либо true, либо false
где флажок определен как:
<input type="checkbox" name="myCheckBox">