Javascript: Включить список флажков, когда флажок установлен (с прототипом) - PullRequest
2 голосов
/ 06 мая 2010

Я использовал jquery для этого, но теперь мне нужно сделать это с Prototype, и я немного растерялся из-за отсутствия документации

У меня есть 2 списка флажков

Первый список:

Check box 1
Check box 2

Второй список:

Check box x
check box y
check box z

Мне нужен код JS, использующий прототип для работы следующим образом: Второй список остается отключенным, пока я не установлю один из флажков в Первом списке.

Есть предложения?

Ответы [ 2 ]

4 голосов
/ 06 мая 2010

Вот код JavaScript:

Event.observe(window, 'load', function(){
    // for all items in the group_first class
    $$('.group_first').each(function(chk1){
        // watch for clicks
        chk1.observe('click', function(evt){
            // count how many of group_first
            // are checked, true if any are checked
            var doEnable = ($$('.group_first:checked').length > 0);
            // for each in group_second, enable the
            // checkbox, and remove the cssDisabled class
            $$('.group_second').each(function(item){
                if (doEnable) {
                    item.enable().up('label').removeClassName('cssDisabled');
                } else {
                    item.disable().up('label').addClassName('cssDisabled');
                }
            });
        });
    });
});

На основании этого HTML:

<fieldset>
    <legend>First Group</legend>
    <label><input type="checkbox" value="1"
        class="group_first" />Check box 1</label><br />
    <label><input type="checkbox" value="2"
        class="group_first" />Check box 2</label>
</fieldset>


<fieldset>
    <legend>Second Group</legend>
    <label class="cssDisabled"><input type="checkbox" value="x"
        class="group_second" disabled="disabled" />Check box x</label><br />
    <label class="cssDisabled"><input type="checkbox" value="y"
        class="group_second" disabled="disabled" />Check box y</label><br />
    <label class="cssDisabled"><input type="checkbox" value="z"
        class="group_second" disabled="disabled" />Check box z</label>
</fieldset>

Добавить этот CSS:

.cssDisabled { color: #ccc; }

Документация по Prototype очень хорошая. Вот методы, которые я использую:

Для тех, кто интересуется, как это можно сделать в jQuery:

jQuery(document).ready(function(){ 
   $('.group_first').bind('click', function(){
        var doEnable = ($('.group_first:checked').length > 0);
        $('.group_second').each(function(){
            if (doEnable) {
                $(this).attr('disabled', null);
                $(this).parents('label').removeClass('cssDisabled');
            } else {
                $(this).attr('disabled', 'disabled');
                $(this).parents('label').addClass('cssDisabled');
            }
        });
    });
});
0 голосов
/ 06 мая 2010

Это тестовый код, который я собрал, и отметив, что флажки 1-й группы не включают флажки группы 2

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>toggle disabled</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="prototype.js" type="text/javascript"> 
<script type="text/javascript">
var checkboxes = $$('input[name="group1"]');
checkboxes.each(function(s) {
    s.observe('click', function() {
        if(this.checked) {
            $$('input[name="group2"]').each(function(s) {
                s.enable();
            });
        } else {
            if(!$$('input[name="group2"][checked="checked"]').length) {
                alert('nothing checked');
                $$('input[name="group2"]').each(function(s) {
                    s.disable();
                });
            }
        }
    });
});
</script>

</head>
<body>
    <div>
        <label> Group 1 </label>
        <input type="checkbox" name="group1" value="test"/>
        <input type="checkbox" name="group1" value="test"/>
        <input type="checkbox" name="group1" value="test"/>
    </div>
    <div>
        <label> Group 2 </label>    
        <input type="checkbox" name="group2" disabled="disabled"/>
        <input type="checkbox" name="group2" disabled="disabled"/>
        <input type="checkbox" name="group2" disabled="disabled"/>
    </div>
</body>
</html>
...