Avatar billede nicolailissau Nybegynder
22. december 2011 - 16:47 Der er 13 kommentarer og
1 løsning

jquery problem

Hej.

Jeg har lavet en checkbox jeg gerne vil checke/afchecke.

Jeg har et kald:

<img id="select_<?php echo $result->id;?>" onclick="toggle(this.id);" src="<?php echo assets('images'); ?>checkbox/checkbox.png" />

Jeg prøver at ændre det ved:

function toggle(id) {
   
    $(id).attr("src","unchecked.png");
}

Jeg har fundet eksemplet her: http://stackoverflow.com/questions/554273/changing-the-image-source-using-jquery

Jeg har skåret det helt ned, men kan stadig ikke få det til at fungere?
Avatar billede The_Buzz Novice
22. december 2011 - 17:22 #1
jQuery 1.6+

Brug den nye .prop() funktion:

$(".myCheckbox").prop("checked", true);
$(".myCheckbox").prop("checked", false);

jQuery 1.5 og derunder:
/* Checke box */
$('.myCheckbox').attr('checked','checked')

/* Fjerne check af box */
$('.myCheckbox').removeAttr('checked')
Avatar billede nicolailissau Nybegynder
22. december 2011 - 17:30 #2
Tak for indlæg. Jeg har ikke været helt forståelig kan jeg se. Jeg har lavet min egen checkbox. Og det jeg gerne vil er at skifte billedet fra "checked" til "unchecked"- billede, ved at ændre på img taggets src.

Nogle forslag?
Avatar billede The_Buzz Novice
22. december 2011 - 17:52 #3
Men skal den også "virke" som en checkbox så eftersom den er image? Så skal du jo i samme ombæring sætte en <input type="hidden" name="checkedbox22" value=""> til f.eks. 1 med jquery
Avatar billede The_Buzz Novice
22. december 2011 - 17:53 #4
Hvis det da er en form
Avatar billede nicolailissau Nybegynder
22. december 2011 - 18:02 #5
Ja den skal også virke som checkbox. Jeg havde tænkt mig at lave det således at når et spørgsmål blev uncheckede, ville jeg ligge dets id i et array. Når jeg så laver mit kald til db, trækker jeg så bare disse id'er fra.

Det der undrer mig er bare at det "burde" fungere? Jeg synes jeg har kogt det helt ned, men kan ikke finde fejlen i det..

Det er ikke en form, men blot en list hvor man kan afchecke nogle spørgsmål:
www.nicolailissau.dk/eksperten/help.png
Avatar billede olebole Juniormester
22. december 2011 - 18:46 #6
<ole>

Et billede siger ikke rigtig noget. Prøv at lægge et link til et eksempel  =)

/mvh
</bole>
Avatar billede olebole Juniormester
22. december 2011 - 20:53 #7
Du alternativt lave et png billede med en checked og uncheked checkbox over hinanden. Hvis de hver især er 24x24px, bliver billedet altså 24x48px. Så kunne du bruge en kode i stil med:

<style type="text/css">
.checkbox {
    position: relative;
    width: 24px;
    height: 24px;
    display: inline-block;
    background: url(check_sprint.png);
    overflow: visible; /* ret til hidden */
}
.checkbox input {
    position: absolute;
    left: -50px;
}
</style>

<script type="text/javascript">
function setCheck(elm) {
    elm.parentNode.style.backgroundPosition = elm.checked ? "left -24px" : "left top";
}
function toggle(id) {
    var elm = document.getElementById(id);
    elm.click(elm);
}
</script>

<label class="checkbox">
    <input id="fooBar" onclick="setCheck(this)" name="foo" type="checkbox">
</label>

<p>
    <button onclick="toggle('fooBar')">Toggle</button>
</p>

Så virker checkbox'en stadig og vil blive medsendt ved submit af en form - i den tilstand, billedet viser
Avatar billede DeeDawg Nybegynder
22. december 2011 - 22:39 #8
Da du efterspørger jQuery, så får du også lige en løsning der passer med olebole's eksempel:

<script type="text/javascript">
    $(document).ready(function(){
        $(".checkbox").toggle(
            function(){ $(this).css({"background-position":"0 -24px"}).children("input").prop("checked", true); },
            function(){ $(this).css({"background-position":"0 0"}).children("input").prop("checked", false); }
        );
    });
</script>

Og her er det HTML du behøver:

<label class="checkbox"><input type="checkbox" name="foo" /></label>
Avatar billede olebole Juniormester
23. december 2011 - 01:27 #9
Undskyld, men det er ikke en elegant løsning. Det fikse er at udnytte label elementets indbyggede klik af input elementet. Mon ikke man kan nøjes med en funktion:


$(document).ready(function(){
    $(".checkbox").toggle(
        function(){ $(this).css({"background-position":"0 "+($(this).children("input").prop("checked")?"-24px":"0")}); }
    );
});

Avatar billede DeeDawg Nybegynder
23. december 2011 - 11:11 #10
Rigtig godt forslag, olebole, og det kan man sagtens. Dog kan du ikke bruge toggle i dette tilfælde, men hvis vi benytter click istedet, så vil det fungere. :)

<script type="text/javascript">
    $(document).ready(function(){
        $(".checkbox").click(
            function(){ $(this).css({"background-position":"0 "+($(this).children("input").prop("checked")?"-24px":"0")}); }
        );
    });
</script>
Avatar billede olebole Juniormester
24. december 2011 - 14:30 #11
Klart!  :)
Avatar billede nicolailissau Nybegynder
02. januar 2012 - 20:59 #12
Gode forslag, tak for det. Undskyld jeg ikke har svaret tilbage på tråden, men da svarende kom indså jeg at jeg nok ikke var helt nok inde i jQuery endnu. Men jeg har fået det til at virke nu (dog ved at benytte "alm." DOM).

Tak for indlæg, vil I ligge et svar?

Mvh
Avatar billede olebole Juniormester
02. januar 2012 - 21:06 #13
Bruger du ikke jQuery til andet på siden, er alm. JS/DOM/CSS efter min mening også langt at foretrække  *o)

Ellers tak, jeg samler ikke point, så det må være 'vovsens'  :D
Avatar billede nicolailissau Nybegynder
11. januar 2013 - 23:02 #14
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester