2008/8/27 Dermot <[EMAIL PROTECTED]>: > 2008/8/27 Carl Franks <[EMAIL PROTECTED]>: >> 2008/8/27 Dermot <[EMAIL PROTECTED]>: >>> Hi, >>> >>> As a first post I would like to say what a great framework FormFu is. >>> >>> I have a feeling my first question is not the smartest to ask but here goes. >>> >>> My form has a series of checkboxs that correspond to true/false fields. >>> >>> I am doing this to >>> >>> if ($c->model->{val} == 1) { >>> $box->attributes->{checked} = 'true'; >>> } >>> >>> >>> This gives me a source like this >>> >>> >>> <label>Has type</label> >>> <input name="hastype" type="checkbox" checked="true" /> >>> >>> >>> My query is whether this is correct HTML (4)? >>> >>> I had a look at the WC3 site and I think checked is an attribute but I >>> thought I should be getting a source like >>> <input name="hastype" type="checkbox" checked /> >>> >>> Am I using the right methods? >> >> Hi Dermot, >> >> Don't worry - this isn't a silly question at all! >> >> As Moritz said, checked="checked" is equivalent to the old `checked`, >> and should work just fine in HTML4 - it's just that our output is >> geared towards being valid xhtml. >> >> I think there's a more "correct" way of doing this, though. >> You should always be setting the Checkbox's value(), so that the >> browser knows what to send back when it's checked. >> In this case, you could just do this >> >> $box->default( $c->model->{val} ); >> >> And the Checkbox is smart enough to set checked="checked" when >> default() is the same as value(). >> And if they're different, the default() will just be ignored. > > > Thank you both you your quick response and I can see what you mean by > being xhtml compliant. I have tried to use Carl's suggested default > method but I can't be using it correctly. I imagine I should see a > source like > > <input type="checkbox" name="hastype" checked="true"/> or <input > type="checkbox" name="hastype" checked="false"/> > > Here's my complete subroutine, perhaps that might explain why that > method doesn't appear to work. > > use base qw(Catalyst::Controller::HTML::FormFu); > ... > > sub updateCheckboxes : Private { > my ($c,$data) = @_; # Data contains the model. > my $form = $c->stash->{form}; > my $checkboxes = $form->get_all_elements({type => 'Checkbox'}); > foreach my $box (@{$checkboxes}) { > my $name = $box->name; > my $val = $data->sub_id->$name; > $c->log->debug("Box=$box->{name} $data->sub_id->$box->name > VAL=$val"); > # if ($val && $val == 1) { > $box->default($val); > # } > } > }
No, if value() eq default(), you'll get: <input type="checkbox" name="hastype" checked="checked"/> otherwise, you'll get: <input type="checkbox" name="hastype"/> Is that what was happening? Carl _______________________________________________ HTML-FormFu mailing list HTML-FormFu@lists.scsys.co.uk http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu