我已经为我的表格选择了制造商的输入。
<div class="form-group">
<label for="manufacturer">Manufacturer</label>
<select id="manufacturerSelect" name="manufacturer" class="form-control">
<option disabled selected value> -- select an manufacturer -- </option>
<?php foreach ($manufacturers as $manufacturers_item): ?>
<option value="<?=$manufacturers_item['id'];?>" <?php echo set_select('manufacturer',$manufacturers_item['id'], ( !empty($manufacturer) && $manufacturer == $manufacturers_item['id'] ? TRUE : FALSE )); ?> ><?=$manufacturers_item['name'];?></option>
<?php endforeach; ?>
<option disabled>──────────</option>
<option value="24" <?php echo set_select('manufacturer','24', ( !empty($manufacturer) && $manufacturer == '24' ? TRUE : FALSE )); ?> >Other</option>
</select>
<?php echo form_error('manufacturer'); ?><br />
</div>
如果选中“other”(值== 24),则会询问其他输入:
$('body').on('change', '#manufacturerSelect', function() {
if ($(this).val() == 24) {
$("#otherManufacturerSelect").removeClass('hidden');
} else {
$("#otherManufacturerSelect").addClass('hidden')
}
});
和HTML:
<div id="otherManufacturerSelect" class="form-group">
<label for="otherManufacturer" >What is it then?</label>
<input type="text" name="otherManufacturer" class="form-control">
<?php echo form_error('otherManufacturer'); ?><br />
</div>
CSS:
.hidden {
display: hidden;
}
现在,如果用户选择“其他”作为制造商,则显示添加输入。如果manufacturer == 24
,则在服务器端添加其他制造商的表单验证规则。问题是每次用户从服务器获得响应时都会显示其他制造商输入。我可以将class="hidden"
默认添加到其他制造商div,但如果表单验证没有运行,则其他制造商字段将不再显示给用户。
我需要的是PHP IF条件:
<div id="otherManufacturerSelect" <?php if(/*???*/):?>class="hidden"<?php endif; ?> class="form-group">
只有当制造商不是“其他”时,才会添加class="hidden"
。但我无法想到严峻的条件。
任何帮助将不胜感激!
修改
控制器:
public function create()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->form_validation->set_rules('manufacturer', 'Manufacturer', 'required');
if($this->input->post('manufacturer') == '24'){
$this->form_validation->set_rules('otherManufacturer', 'Other manufacturer', 'required');
}
$data['manufacturers'] = $this->puzzles_model->getManufacturers();
if ($this->form_validation->run() === FALSE)
{
$this->load->view('puzzles/create', $data);
}
else
{
/* do the upload, return upload errors or save in db*/
}
}
答案 0 :(得分:1)
在您的特定情况下,这将解决问题:
<div id="otherManufacturerSelect" class="form-group <?php if(isset($manufacturer) && $manufacturer !== '24') { echo 'hidden'; } ?> ">
<label for="otherManufacturer" >What is it then?</label>
<input type="text" name="otherManufacturer" class="form-control">
<?php echo form_error('otherManufacturer'); ?><br />
</div>
然后你可以删除JS片段。附加表单将隐藏在服务器端(将设置class =“hidden”)。
我看到你在同一个模板中使用var $ manufacturer。我看不到你的控制器以及你如何传递变量但是你也可以使用$ _GET ['manufacturer']或$ _POST ['manufacturer'](取决于你的表单操作方法)而不是$ manufacturer。 注意:$ _GET ['manufacturer'],$ _POST ['manufacturer']和$ _REQUEST ['manufacturer']未经过清理输入。使用$ manufacturer时,我认为它已在您的控制器中进行了清理。