Can't create checked checkboxes

Can't create checked checkboxes

av Luca Celenza -
Antall svar: 5
Hi everybody. I'm stuck with a problem I'm sure it has an obvious solution (which I can't seem to find, however): I can't create a checked checkbox in a form. What I want to accomplish is a group of checked checkboxes representing the days of the week. I'm using the code below with no success:


$wdays = array();

$wdays[] =& $mform->createElement('checkbox', 'Mon', '', get_string('monday','calendar'), 'checked="checked"');
$wdays[] =& $mform->createElement('checkbox', 'Tue', '', get_string('tuesday','calendar'), 'checked="checked"');
$wdays[] =& $mform->createElement('checkbox', 'Wed', '', get_string('wednesday','calendar'), 'checked="checked"');
$wdays[] =& $mform->createElement('checkbox', 'Thu', '', get_string('thursday','calendar'), 'checked="checked"');
$wdays[] =& $mform->createElement('checkbox', 'Fri', '', get_string('friday','calendar'), 'checked="checked"');
$wdays[] =& $mform->createElement('checkbox', 'Sat', '', get_string('saturday','calendar'), 'checked="checked"');
$wdays[] =& $mform->createElement('checkbox', 'Sun', '', get_string('sunday','calendar'), 'checked="checked"');

$mform->addGroup($wdays, 'wdays', 'Days of the week', array(' '), true);


This code displays fine the checkboxes and all, but no one of them is checked. Any suggestion? Thanks in advance.
Gjennomsnittlig vurdering: -
Som svar til Luca Celenza

Re: Can't create checked checkboxes

av Davo Smith -
Bilde av Core developers Bilde av Particularly helpful Moodlers Bilde av Peer reviewers Bilde av Plugin developers
I'm not an expert at Moodle Forms, but I'm guessing you might need to add a "$mform->setDefault('Mon', true)" line just after each one.
Gjennomsnittlig vurdering:Useful (1)
Som svar til Davo Smith

Re: Can't create checked checkboxes

av Luca Celenza -
Worked like a charm. Really thank you!
For the ones still wondering here's the code:


$wdays = array();

//creating days of the week
$wdays[] =& $mform->createElement('checkbox', 'Mon', '', get_string('monday','calendar'));
$wdays[] =& $mform->createElement('checkbox', 'Tue', '', get_string('tuesday','calendar'));
$wdays[] =& $mform->createElement('checkbox', 'Wed', '', get_string('wednesday','calendar'));
$wdays[] =& $mform->createElement('checkbox', 'Thu', '', get_string('thursday','calendar'));
$wdays[] =& $mform->createElement('checkbox', 'Fri', '', get_string('friday','calendar'));
$wdays[] =& $mform->createElement('checkbox', 'Sat', '', get_string('saturday','calendar'));
$wdays[] =& $mform->createElement('checkbox', 'Sun', '', get_string('sunday','calendar'));

//display them into one row
$mform->addGroup($wdays, 'wdays', 'Days of the week', array(' '), true);

//check every day of the week
$mform->setDefault('wdays[Mon]', true);
$mform->setDefault('wdays[Tue]', true);
$mform->setDefault('wdays[Wed]', true);
$mform->setDefault('wdays[Thu]', true);
$mform->setDefault('wdays[Fri]', true);
$mform->setDefault('wdays[Sat]', true);
$mform->setDefault('wdays[Sun]', true);
Som svar til Luca Celenza

Re: Can't create checked checkboxes

av Daniele Cordella -
Bilde av Core developers Bilde av Plugin developers
or you can display the form using

$defaults = new object();
$defaults->wdays = 'Mon';
$mform->set_data($defaults);
$mform->display();

if I well remember ammiccante
Som svar til Luca Celenza

Re: Can't create checked checkboxes

av Frank Ralf -
Your codes marks all of your checkboxes as "checked" which is impossible to render for the browser. Only add the attribute for your default value and omit the attribute entirely for the other checkboxes.

hth
Frank
Som svar til Frank Ralf

Re: Can't create checked checkboxes

av David Druckenmiller -
I realize this thread has been silent since April, but I've run into the same issue. I am able to work around it by using Davo Smith's suggestion of using:
$mform->setDefault('Mon',true);

However, I'm still wondering why passing 'checked="checked"' as the attribute parameter doesn't work for check-boxes. If I pass 'disabled="disabled"' as the attribute parameter the input is correctly disabled, so the attribute IS being used as it should; just the 'checked' attribute doesn't work.

In response to Frank's comment about browser not being able to render this, that is not accurate because we're talking about check-boxes. If we were talking about radio buttons, then you're absolutely right--but check-boxes can all be checked.

If I use the setDefault() function to check the box and then view the source in the browser, lo and behold the attribute checked="checked" is now present.

It's possible that I'm missing something, but it seems like a minor bug to me.

</rant>

Dave