2

I'd like to use a jqm styled checkbox in my listview cells. I've made a composite picture to show the desired end result:

http://tinyurl.com/ctvko27

Whenever I use the jqm checkbox with a label it gets a big styling from the framework, which I do not want. I don't want to use the fieldset feature since these are always inset and I need the list to be 100% width. I want to be able to use the checkbox, fully styled, on its own as part of my listview cell. I hope my question is clear and that someone can provide some guidance.

Regards, Ivo

3 Answers 3

4

Solution

Here's a solution for you, I had a spare time so here it is: http://jsfiddle.net/Gajotres/ek2QT/

Javascript code:

First on pagebeforeshow select/unselect our custom checkboxes.

$('#index').live('pagebeforeshow',function(e,data){
    $('input[type="checkbox"]').each(function(){
        ($(this).is(':checked')) ? $(this).parent().parent().addClass('checked') : $(this).parent().parent().addClass('not-checked');   
    });
});

This part will handle checkbox changing states.

$('.checkBoxLeft').bind('click', function(e) {
    if($(this).find('input[type="checkbox"]').is(':checked')){
        $(this).removeClass('checked').addClass('not-checked');
        $(this).find('input[type="checkbox"]').attr('checked' , false);
    } else {
        $(this).removeClass('not-checked').addClass('checked');             
        $(this).find('input[type="checkbox"]').attr('checked' , true);
    }
});

Rest off the css is in the example, img used for custom states can be found here:

Final notes

If you want to find more about how to customize jQuery Mobile page and widgets then take a look at this article. It comes with a lot of working examples, including why is !important necessary for jQuery Mobile.

Sign up to request clarification or add additional context in comments.

1 Comment

Wow, this was actually more involved than I initially thought. Thank you very much for this and a well deserved accepted answer.
0

There are a couple of approaches that might work. You might try placing the checkbox head of the hyperlink <a /> tag. You might also disable the automatic enhancement on your checkbox. Fundamentally you are going to have issues with touch events and any overlap of the two controls.

<input type="checkbox" data-role="none" />

1 Comment

Thanks for your reply. Contrary to my image the list items will not be clickable (not nested), so I think I won't have issues with overlap of two controls. The markup you suggested results in a small, non styled, checkbox unfortunately.
0

Just tried to use Gajotre's solution with the latest versions of jquery (1.9.1) + jquerymobile (1.3.2) but unfortunately it didn't work.

You have to change the

$(this).find('input[type="checkbox"]').attr('checked' , false);
$(this).find('input[type="checkbox"]').attr('checked' , true);

to

$(this).find('input[type="checkbox"]').prop('checked' , false);
$(this).find('input[type="checkbox"]').prop('checked' , true);

otherwise you'll be able to change the checkbox "checked" value only once.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.