2014-09-14 20:51:58 3608次浏览 2条回答 0 悬赏 0 金钱

应该算是个bug吧。
版本:YII1.1.15

在php的视图里,输出这个

$form->radioButtonList(模型,字段 , 选项);

我试图生成一个单选按钮组,选项使用的是数组数据。

看了一下代码,和dropDownList的使用时一样的,文档里http://www.yiichina.com/api/1.1/CActiveForm#radioButtonList-detail
里面是这样说的:
$data array 用于生成单选按钮组的选项的数据 (value=>display)

当你把$data定义成下面这样的时候,radioButtonList生成的单选按钮的value永远是从0,1,2,3,4,5这样的值,并不是按照你的数组里的值呈现的,类似的dropDownList则不会出现这情况。

    $data = array(
        1=>'民政局',
        2=>'科技局',
        3=>'保障部',
        7=>'组织部',
    );

这种情况下,生成的4个单选按钮的value分别是0,1,2,3,是不对的。

然后我将$data改为下面的情况:

    $data = array(
        'x1'=>'民政局',
        'x2'=>'科技局',
        'x3'=>'保障部',
        'x7'=>'组织部',
    );

居然又神奇的正确了,value分别是 x1 x2 x3 x7。

后来我就开始找原因,我觉得这可能是个bug,所以我看了源码,没发现问题,再然后看了下我的调用,一个个删除属性,然后测试。最终发现问题,我使用了一个默认的选项'empty' => '请选择部门',导致了上面的bug,把这个删了就正常了,即使是第一种情况也能正确的输出选项和值,今天是没时间研究了,先贴出来,大家有空可以研究看看。

  • 回答于 2017-03-06 16:55 举报

    这个问题我也遇到啦,,坑啊。。。我本地是7,是正确的,,5.3就不行。。。我觉得还是环境问题。。。

    觉得很赞
  • 回答于 2017-03-07 11:09 举报

    找到问题啦,,是框架问题,,源码中类似array_merge()的方法,如果有键值为整型,会自动按0、1、2、3的顺序排序,,解决方法是是弃用empty。。手动拼接数组。。

您需要登录后才可以回答。登录 | 立即注册
lxepoo
总监

lxepoo 江苏南京

注册时间:2014-09-02
最后登录:2020-10-23
在线时长:33小时42分
  • 粉丝27
  • 金钱1487
  • 威望125
  • 积分3067

热门问题