2010-03-02 14 views
7

mam 4 pola wyboru i życzę, aby je włączyć (zaznaczone lub odznaczone) i wszystkie one powinny być takie same, co zawsze stwierdzić, że są w Mam to tak daleko.Przełącz pole wyboru

var toggle_click = false; 

function check_them(element){ 

    if(toggle_click){ 
     $('#'+element+'_1').attr('checked', true); 
     $('#'+element+'_2').attr('checked', true); 
     $('#'+element+'_3').attr('checked', true); 
     $('#'+element+'_4').attr('checked', true); 
    } 

    if(!toggle_click){ 
     $('#'+element+'_1').attr('checked', false); 
     $('#'+element+'_2').attr('checked', false); 
     $('#'+element+'_3').attr('checked', false); 
     $('#'+element+'_4').attr('checked', false); 
    } 

    if(!toggle_click){ toggle_click = true; } 
    if(toggle_click) { toggle_click = false; } 
} 

Na stronie obciążenia niektóre pola wyboru mogą być zaznaczone lub nie zaznaczone - ale po kliknięciu łącza i uruchomieniu tej funkcji, chcę, aby te pola wyboru były ustawione w tym samym stanie.

Kiedy próbuję powyższego, po prostu nie wydaje się zaznaczyć pola i czasami to wszystko zaznacza i uruchomienie tej funkcji ponownie nic nie robi. Co się dzieje? Jestem pozbawiona kawy i zdezorientowany!

Powinny używać grupy checkbox czy coś takiego?

Dzięki wszystkim za pomoc

+0

W ostatnich dwóch wierszach, jeśli _toggle_click_ jest _false_, ustaw go na _true_, a następnie jeśli jest _true_, ustaw go na _false_. Bez względu na to, jaka jest jego początkowa wartość, na końcu zawsze będzie _false_. Zamieniłbym je na 'toggle_click =!toggle_click; '... i użyj jednej pętli for dla całej rzeczy, w której wartość _toggle_click_ idzie po" sprawdzeniu ". – LGT

Odpowiedz

7

..... ...

var isChecked = false; 

function check_them(element){ 

    if(isChecked === false) { 
     $('#'+element+'_1').attr('checked', true); 
     $('#'+element+'_2').attr('checked', true); 
     $('#'+element+'_3').attr('checked', true); 
     $('#'+element+'_4').attr('checked', true); 
     isChecked = true; 
    } 
    else 
    { 
     $('#'+element+'_1').attr('checked', false); 
     $('#'+element+'_2').attr('checked', false); 
     $('#'+element+'_3').attr('checked', false); 
     $('#'+element+'_4').attr('checked', false); 
     isChecked = false; 
    } 
} 
+0

Och kochanie - co mi się przydarzyło. Jeśli i cholernie inny powinien być użyty! Dzięki Sarfraz! – Abs

+0

@Abs: nie ma za co ........... :) – Sarfraz

+0

To jest niepotrzebnie rozwlekłe –

0

zamiast ustawiania atrybutu sprawdzane false, po prostu usunąć go całkowicie! :)

$ ('#' + element + '_ 1'). RemoveAttr ("sprawdzony");

Oto przykład:

var state = $("#element1").attr("checked") === "checked" ? true : false; 
$("#test").click(function(){  
    $("input[id^=element]").each(function(){ 
     if(state === false){ 
      $(this).attr("checked", "checked"); 
     }else{ 
      $(this).removeAttr("checked"); 
     } 
    }); 
    state = !state;   
}); 
+0

'$ (" # element1 "). Attr (" sprawdzone ") ===" sprawdzone "' Czy dla ciebie nie jest wystarczająco logiczna? '? true: false' może zostać całkowicie odrzucone. –

+2

Jeśli przeczytasz resztę kodu, zobaczysz, że odkąd właściwość została usunięta, atrybut ma wartość TRUE lub UNDEFINED. Dzięki za fałszywe -1. –

6

sprawdzone jest "śmieszne" atrybut. Jedna rzecz, którą bym zasugerował, to zamiast attr('checked', false), zamiast tego spróbuj removeAttr('checked').

Zasadniczo w DOM, renderowany element będzie sprawdzony jako atrybut lub jeśli jest zgodny z XHTML, checked=checked. Zatem ustawienie go na false nie jest właściwym rozwiązaniem.

Jeśli chodzi o inne kwestie, nie jestem jeszcze wystarczająco doświadczonym jQuery pro.

+1

To naprawdę zabawne. –

0

Upewnij się, że nie nazywają check_them przed DOM zakończeniu ładowania

$(function() { 
    check_them("whatever"); 
}); 

Ponadto, można uprościć tę całą rzecz do następujących:

var check_them = (function() { 
    var is_checked = false; // Now this is not global, huzzah 
    return function(element) { 
     // You can update all of the elements at once 
     $('#'+element+'_1, #'+element+'_2, #'+element+'_3, #'+element+'_4').attr('checked', !is_checked); 
     is_checked = !is_checked; 
    }; 
})(); 
1

Cóż, dla różnych podejść: Ustawia checkboxy na wszystko, czym nie było:

var toggle_click = false; 
function setCheck(mythis) 
{ 
    $('#'+element+'_1').checked = !mythis.checked; 
    $('#'+element+'_2').checked = !mythis.checked; 
    $('#'+element+'_3').checked = !mythis.checked; 
    $('#'+element+'_4').checked = !mythis.checked; 
    toggle_click = !toggle_click; 
}; 
$(function() { 
    $('#'+element+'_1').click(function() { 
    setCheck(this); 
    }); 
    $('#'+element+'_2').click(function() { 
    setCheck(this); 
    }); 
    $('#'+element+'_3').click(function() { 
    setCheck(this); 
    }); 
    $('#'+element+'_4').click(function() { 
     setCheck(this); 
    }); 
}); 

UWAGA jeśli dać im klasy o nazwie „mycheckbox” jeszcze prostsze:

var toggle_click = false; 
$(function() { 
    $('.mycheckbox').click(function() { 
    $('.mycheckbox').each().checked = !this.checked; 
    toggle_click = !toggle_click; 
    }); 
}); 
4
$('tr').click(function(){ 
     var chkbox = document.getElementById("chk"+this.id); 
     chkbox.checked = !chkbox.checked; 

    }); 
+2

Czy możesz rozwinąć swoją odpowiedź? Wygląda dobrze, ale nie rozumiem, dlaczego używasz 'tr' – ixe013

1

To może być również wykonane przy użyciu javascript tylko bez kłopotów, można użyć obrazu lub niczego, pozwala też go kliknąć.

<html> 
    <body> 
    <a href=" javascript:check();"> Toggle </a> <br> 
    <input type="checkbox" id="c1" > Un/Check me <br> 
    <input type="checkbox" id="c2" > Un/Check me 
    </body> 
</html> 

<script> 
function check() 
{ 
    c1.checked = !c1.checked; 
    c2.checked = !c2.checked; 
} 
</script> 

Mam nadzieję, że to pomoże.