【问题标题】:Resetting dropdown values after failed validation in CodeIgniter在 CodeIgniter 中验证失败后重置下拉值
【发布时间】:2011-10-04 13:43:30
【问题描述】:

我有一个非常简单的投票表格。它包含条目 ID 的单个文本字段,然后是五个下拉列表。唯一的验证是在文本字段上进行,但如果失败,我希望所有下拉菜单都保留它们的值。

例如,用户输入 12345 作为条目,然后从所有五个下拉列表中选择选项 A。 (选项 B 是默认设置。)如果 12345 验证失败,则在显示验证错误时下拉菜单仍应设置为选项 A。那没有发生。我正在使用表单助手的 form_dropdown 来创建下拉菜单。有任何想法吗?如您所见,我尝试在名为 q1 的下拉列表中使用 set_value,但它不起作用。验证本身确实有效。

这是表单的代码:

<?php
$hidden = array('dot_judge_id' => $this->session->userdata('dot_judge_id'));

echo form_open('vote/create'); 
$entry_code_data = array(
    'name' => 'entry_code',
    'id' => 'entry_code',
    'value' => set_value('entry_code')
);

echo form_hidden($hidden);

$score_options = array('1'=>'1 (lowest)', '2'=>'2','3'=>'3', '4'=>'4','5'=>'5 (highest)');
?>

<p><label for="entry_code">Entry code: </label><?php echo form_input($entry_code_data); ?></p>
<p><label for="q1">Question 1: </label><?php echo form_dropdown('q1', $score_options, set_value('q1')); ?></p>
<p><label for="q2">Question 2: </label><?php echo form_dropdown('q2', $score_options, ''); ?></p>
<p><label for="q3">Question 3: </label><?php echo form_dropdown('q3', $score_options, ''); ?></p>
<p><label for="q4">Question 4: </label><?php echo form_dropdown('q4', $score_options, ''); ?></p>
<p><label for="q5">Question 5: </label><?php echo form_dropdown('q5', $score_options, ''); ?></p>

<p><?php echo form_submit('submit', 'Submit vote'); ?></p>                

<?php echo form_close(); ?>
<?php echo validation_errors('<p class="error">', '</p>');?> 

CodeIgniter 论坛上有人告诉我使用 set_select,但我认为我不能使用 set_select,因为我没有写出选择框的各个值,也没有尝试提供硬编码的默认值。我需要在运行表单验证之前将下拉菜单重置为用户选择的值。我正在使用 form_dropdown 函数,那么如何将实际选择的值传递给 set_select 的第二个参数?根据 set_select 文档,

第一个参数必须包含选择菜单的名称, 第二个参数必须包含每一项的值

this post 上也有评论说使用 set_value -echo form_dropdown('events', $options, set_value('events'), $firstItem);。该评论获得了三票,所以我假设它适用于某些人,但对我没有任何作用。这个问题已经有一年了。也许这适用于旧版本的 CI,但不适用于最新版本。无论如何,在使用 form_dropdown 创建下拉菜单时,必须有一种方法来获得“粘性”下拉列表值,不是吗?我无法想象我必须做很长的路要通过循环遍历一组值并分别回显每个选项行来创建下拉列表;这违背了最初使用 CI 之类的东西的目的。

【问题讨论】:

    标签: codeigniter validation codeigniter-2


    【解决方案1】:

    请记住,set_value() 需要第二个参数,即每个项目的值,因此您可以通过添加 $this-&gt;input-&gt;post('q1') 作为第二个参数来使其工作。

    代替:

    <?php echo form_dropdown('q1', $score_options, set_value('q1')); ?>
    

    你会写:

    <?php echo form_dropdown('q1', $score_options, set_value('q1', $this->input->post('q1'))); ?>
    

    希望对您有所帮助。

    【讨论】:

    • 谢谢!我想知道为什么 entry_code 字段会保存它的值,但是,当传入的数组只有 'value'=&gt;set_value('entry_code') 而没有 $this-&gt;input-&gt;post('entry_code') 的第二个参数时。
    【解决方案2】:

    容易多了,

       <select name="add_fields_type" id="add_fields_type">
         <option value="">Please Select</option>
         <option value="Input">Input</option>
         <option value="Text Area">Text Area</option>
         <option value="Radio Button">Radio Button</option>
         <option value="Check Box">Check Box</option>
       </select>
    
    
         <script>
          document.getElementById('select_status').value="<?php echo set_value('status'); ?>";
         </script>
    

    【讨论】:

      猜你喜欢
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      相关资源
      最近更新 更多