2016-04-05 8 views
-1

У меня есть список флажков, каждый из которых относится к строке в таблице. Каждая строка принадлежит клиенту. Я использовал имя клиента как класс флажков. Мне нужно только флажки, которые используют один и тот же класс, который будет включен после того, как будет отмечен первый флажок.Отключить флажки после проверки

<input class="Alexander David" type="checkbox" value="Domain-9" name="bill[]" id="bill[]" onchange="check();"> 
<input class="Alexander David" type="checkbox" value="Domain-10" name="bill[]" id="bill[]" onchange="check();"> 
<input class="Alexander David" type="checkbox" value="Domain-11" name="bill[]" id="bill[]" onchange="check();"> 
<input class="John Doe" type="checkbox" value="Domain-12" name="bill[]" id="bill[]" onchange="check();"> 
function check(){ 
    $("#bill").on("change", function() { 
     if ($('#bill').attr('class') !== $(this).attr("class")) { 
      $(".bill").attr("class").prop("disabled", false); 
     } else { 
      $("#bill").prop("disabled", true); 
     } 
    }); 
} 
+1

Использовать '.prop' над' .attr' – Rayon

+1

Почему привязка событий 'inline-events', а также' jQ'? – Rayon

+0

@RayonDabre попробовал это, все еще не работает – dev7

ответ

1

попробовать это:

$('input[name*=bill]').change(function() { 
 
    $t = $(this); 
 
    var $th = $(this).attr('class'); 
 
    if ($(this).is(':checked')) { 
 
    $('input[name*=bill]').each(function() { 
 
     if ($(this).attr('class') != $th) { 
 
     $(this).not($t).prop('disabled', true); 
 
     } 
 
    }); 
 
    } else { 
 
    $('input[name*=bill]').each(function() { 
 
     if ($(this).attr('class') != $th) { 
 
     $(this).not($t).prop('disabled', false); 
 
     } 
 
    }); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input class="Alexander David" type="checkbox" value="Domain-9" name="bill[]"> 
 
<input class="Alexander David" type="checkbox" value="Domain-10" name="bill[]"> 
 
<input class="Alexander David" type="checkbox" value="Domain-11" name="bill[]"> 
 
<input class="John Doe" type="checkbox" value="Domain-12" name="bill[]">

+0

, когда отметит первый флажок, он отключает блоки 2/3 и включает 4, он должен отключить 4 и сохранить включенную 2/3. как только поле 4 будет отмечено, все ящики должны быть отключены, но он ждет, пока еще один флажок не будет отмечен, прежде чем отключать остальные. – dev7

+0

ОК обновил код! –

+0

его теперь работает, но не на первый клик? – dev7

0

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

disabled является property не attribute. поэтому используйте prop вместо attr.

<script> 
function check(){ 
$("[name='bill']").on("change", function() { 
if ($("[name='bill']").attr('class') !== $(this).className()) { 
$("[name='bill']").prop('disabled', true); 
} else { 
$("[name='bill']").prop('disabled', false); 
} 
}); 
} 
</script> 
+0

спасибо, но все еще не работает – dev7

+0

все еще не работает для меня? – dev7

+0

Как, если нет элементов с классом «bill», или «bill» или «bill»? – Pimmol

0

Эй, вы можете попробовать мой код: я сделал некоторые изменения в коде, и это поможет вам:

<input class="bill" client="Alexander David" value="Domain-9" name="bill[]" type="checkbox"> 
<input client="Alexander David" value="Domain-10" name="bill[]" class="bill" type="checkbox"> 
<input client="Alexander David" value="Domain-11" name="bill[]" class="bill" type="checkbox"> 
<input client="John Doe" value="Domain-12" name="bill[]" class="bill" type="checkbox"> 
<script>  
$(document).ready(function(){ 
    $('.bill').change(function(){ 
     var client = $(this).attr('client'); 
     if($(this).is(':checked')) 
     { 
     $('input[client='+client+']').attr('disabled', 'disabled'); 
     $(this).removeAttr('disabled'); 
     } 
     else 
     $('input[client='+client+']').removeAttr('disabled'); 
    }); 
}); 
<script> 
+0

спасибо, но не работает – dev7

+0

вы тоже изменили html – vishu

+0

Я поставил код jquery внутри готовой функции, сделайте это и снова проверьте – vishu

0

Использование имен классов может быть проблематичным (из-за пробелов). Вместо этого используйте вместо этого атрибут data.

В этом примере мы переключить disabled свойство всех соответствующих входов:

$(function(){ 
 
    
 
    $("input[type=checkbox]").on("change",function(){ 
 
     var $this = $(this), 
 
      thisIdent = $this.data("ident"); 
 

 
     $("[data-ident='"+thisIdent+"']").not($this).prop("disabled",$this.is(":checked")); 
 

 
    }); 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input data-ident="Alexander David" type="checkbox" value="Domain-9" name="bill[]"> 
 
<input data-ident="Alexander David" type="checkbox" value="Domain-10" name="bill[]"> 
 
<input data-ident="Alexander David" type="checkbox" value="Domain-11" name="bill[]"> 
 
<input data-ident="John Doe" type="checkbox" value="Domain-12" name="bill[]">

+1

при отметке первого окна, который отключает блоки 2/3 и включает 4, он должен отключить 4 и сохранить 2/3 включен. как только поле 4 будет отмечено, все флажки должны быть отключены, но он ждет, пока еще один флажок не будет отмечен, прежде чем отключать остальные – dev7

0

Вы выполняете функцию onChange с #bill, что означает bill - это идентификатор. Но в вашем HTML это имя элементов, и в этих флажках отсутствует идентификатор. Таким образом, ваш код не работает.

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

<input class="billCheck Alexander David" type="checkbox" value="Domain-9" name="bill[]"> 
<input class="billCheck Alexander David" type="checkbox" value="Domain-10" name="bill[]"> 
<input class="billCheck Alexander David" type="checkbox" value="Domain-11" name="bill[]"> 
<input class="billCheck John Doe" type="checkbox" value="Domain-12" name="bill[]"> 


<script type="text/javascript" > 
     $(".billCheck").on("click", function() { 
       if ($(this).is(":checked")) { 
       $(this).addClass("disabled"); 
       } else { 
       $(this).removeClass("disabled"); 
       } 
     }); 

     $('input.disabled').on('click', function(evt) { 
       evt.preventDefault(); 
     }); 
    </script> 

    <style> 
     input.disabled { 
      opacity : .50; 
      filter : alpha(opacity=50); /* IE<9 */ 
      cursor : default; 
     } 
    </style> 

Я думаю, что это соответствует тому, что вы хотите.

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