I think this might be a bug. My Safecracker form is editing a channel where the Select ‘Allow Comments’ button in Publish page by default? preference is set to “Yes”. I loaded an entry in a Safecracker form whose Allow Comments checkbox is checked, and viewing source I see:
<form id="publishForm" method="post" action="http://site.com/edit/something" enctype="multipart/form-data" >
<div class='hiddenFields'>
<input type="hidden" name="ACT" value="321" />
<input type="hidden" name="RET" value="http://site.com/edit/something" />
<input type="hidden" name="URI" value="edit/something" />
<input type="hidden" name="XID" value="e154f0a4047e67fbf4c885cf4713d6e401a1e" />
<input type="hidden" name="return_url" value="edit/something" />
<input type="hidden" name="author_id" value="4321" />
<input type="hidden" name="channel_id" value="4" />
<input type="hidden" name="entry_id" value="12345" />
<input type="hidden" name="site_id" value="1" />
<input type="hidden" name="return" value="edit/something" />
<input type="hidden" name="preserve_checkboxes" value="yes" />
<input type="hidden" name="allow_comments" value="n" />
</div>
Note the last line there. Even if my checkbox is checked in the CP, the hidden field automatically inserted here reads “n”. I have to explicity override that later with another hidden field:
<input type="hidden" name="allow_comments" value="y" />
towards the end of the form.