在表单中镜像用户输入,是否有另一种方法可以执行此操作?

时间:2014-01-02 20:53:50

标签: html codeigniter smarty

我打算在表单中“收回”有关用户的一些信息,因此我必须将该信息放入正确的输入中。有些是精选结构。

我想从该选择结构中选择正确的选项,为此我喜欢这样:

 <select  class="m-wrap span12" name="gender">
                 {if $obj eq '1'}
                    <option value="">Seleccione</option>
                    <option value="1" selected>Hombre</option>
                    <option value="2">Mujer</option>
                 {elseif $obj eq '2'}
                    <option value="">Seleccione</option>
                    <option value="">Hombre</option>
                    <option value="2" selected>Mujer</option>
                 {else}
                    <option value="0" selected>Seleccione</option>
                    <option value="">Hombre</option>
                    <option value="2">Mujer</option>
                 {/if}
                 </select>

但我想缩短它,所以我不重复代码行。我试过这个但没有成功:

<select  class="m-wrap span12" name="gender" id="{$obj}">
      <option value="1" id="1">Hombre</option>
      <option value="2" id="2">Mujer</option>
      <option value="0" id="3">Seleccione</option>
</select>

我正在使用smarty模板和codeigniter。

先谢谢,我是编程新手。

4 个答案:

答案 0 :(得分:1)

<select class="m-wrap span12" name="gender">
    <option value="1" id="1" <?=($obj == 1) ? 'selected="selected"' : '';?>>Hombre</option>
    <option value="2" id="2" <?=($obj == 2) ? 'selected="selected"' : '';?>>Mujer</option>
    <option value="0" id="3" <?=($obj == 3) ? 'selected="selected"' : '';?>>Seleccione</option>
</select>

答案 1 :(得分:1)

在这种情况下,我在form_helper

的帮助下只使用了一行代码
<div id='myform'>
{form_open('controller/method')}
{form_dropdown('gender',$genders,set_value('gender',$obj),'class = "m-wrap span8 chosen" data-with-diselect="1"')}
{form_close()}
</div>

其中

  1. $ genders是分配给smarty变量的性别列表,如

    $ genders = array('0'=&gt;'Seleccione','1'=&gt;'Hombre','2'=&gt;'Mujer')

  2. 'gender'是选择标记的名称属性值

  3. set_value()函数设置选项选项,其中选项值等于$ obj

  4. 和其他类似选择标记的属性

    注意

  5. 必须在显示模板之前加载

    form_helper

答案 2 :(得分:0)

您可以通过使选项的隐藏HTML值等于该选项在选择列表中的位置(从零开始)来执行此操作;然后存储服务器端值;然后将菜单的selectedIndex设置为等于存储值。

<select  class="m-wrap span12" name="gender" id="gender_field">
    <option value="0" selected>Seleccione</option>
    <option value="1">Hombre</option>
    <option value="2">Mujer</option>
</select>

<input type="hidden" id="gender_obj" value="{$obj}" />
<!-- the above line passes the server-side variable into the
  -- HTML for JavaScript to use -->
<script>
(function (){
var gender_field = document.getElementById('gender_field'),
    gender_obj   = document.getElementById('gender_obj'),
    n;

    if (!gender_field || !gender_obj) return;
    n = gender_obj.value - 0;
   /* will be NaN if nothing (or nothing numerical) is there,
    * such as on the first visit */
    gender_field.selectedIndex = gender_field.options[n] ? n : 0;
})();
</script>

答案 3 :(得分:0)

我终于可以做到这一点。使用Smarty,sintax可以是:

<select  class="m-wrap span8 chosen" name="gender" data-with-diselect="1" value="">
   <option value=" " {if $okInfo['gender'] eq ' '}selected{/if}>Seleccione</option>
   <option value="1" {if $okInfo['gender'] eq '1'}selected{/if}>Hombre</option>
   <option value="2" {if $okInfo['gender'] eq '2'}selected{/if}>Mujer</option>
</select>

这样,如果用户从下拉菜单中选择某个选项但是然后没有通过表单验证,那么他输入的数据和确定应该以相同的方式进行检索。因此,对于选择的html标记,这是“回溯”他输入的数据的方式。