1

我正在使用 cakePHP 框架来处理我的项目。

如何在选中复选框时启用文本框,并在未选中时禁用它?我尝试了javascript,但它不起作用,我认为这是因为我的“id”。我应该如何申报我的“身份证”?

这是我的代码。它在一个 forLoop 中。


echo $this->Form->checkbox('menu_item_id',
                            array(
                                    'value' => $items[$i]['MenuItem']['menu_item_id'],
                                    'hiddenField' => false,
                                    'name' => 'data[OrderItem][menu_item_id][]',
                                    'label' => false,
                                    'div' => false,
                                    )
                                ); 

echo $this->Form->input('quantity', 
                        array(
                            'style'=>'width:65px; height:25px;',
                            'name' => 'data[OrderItem][quantity][]',
                            'div' => false,
                            'label' => false
                            )
                        );

echo $this->Form->input('notes', 
                        array(
                            'style'=>'width:65px; height:25px;',
                            'name' => 'data[OrderItem][notes][]',
                            'div' => false,
                            'label' => false
                            )
                        );
 

顺便说一句,我是 cakePHP 和 Javascript 的初学者。谢谢。

我做了一些改变。在我的脚本中,我添加了这个

 

    
        function changeStatus(){
            if(document.getElementById("my_checkbox").checked == true){
                document.getElementById("input_field").disabled= false;
                alert('a');
            } else {
                document.getElementById("input_field").disabled= true;
                alert("B");
            }
        }
    

*警报用于测试。它进入正确的块,但它没有启用/禁用文本字段。你知道为什么吗?

4

3 回答 3

1

通过 dfault cakephp 将 id 分配给具有正常约定的任何元素UsersMenuItemId(我假设 users 是您的模型)。但是您可以将 id 分配给其他 htmlOptions,例如

echo $this->Form->checkbox('menu_item_id',
                        array(
                                'id' => 'my_checkbox',
                                'value' => $items[$i]['MenuItem']['menu_item_id'],
                                'hiddenField' => false,
                                'name' => 'data[OrderItem][menu_item_id][]',
                                'label' => false,
                                'div' => false,
                                )
                            );

现在编写一个基本脚本:

<script>
  $(document).ready(function(){
      $('#my_checkbox').event('click', function(){
          if($('#my_checkbox').is(':checked')){
             $('#input_field').removeAttr('disabled');                 
          } else {
             $('#input_field').attr('disabled','disabled');
          }
      });
  });
</script>
于 2013-04-29T11:11:11.903 回答
0
echo $this->Form->checkbox('menu_item_id',
                            array(
                                    'value' => $items[$i]['MenuItem']['menu_item_id'],
                                    'hiddenField' => false,
                                    'name' => 'data[OrderItem][menu_item_id][]',
                                    'label' => false,
                                    'div' => false,
                                    )
                                ); 

这里您声明的第一个字段“menu_item_id”是表名,或者我们可以说模型名。

将 id 分配给输入有不同的选项,例如:

echo $this->Form->checkbox('modelname',
                                array(
                                        'value' => $items[$i]['MenuItem']['menu_item_id'],
                                        'hiddenField' => false,
                                        'name' => 'data[OrderItem][menu_item_id][]',
                                        'label' => false,
                                        'div' => false,
                                        'id'=>'your-id'
                                        )
                                    ); 

但请记住,页面上的 id 必须是唯一的。

于 2013-04-30T10:06:58.180 回答
0

复选框数组 => 添加

"onclick'=>'changeStatus(this);"

如果关键字不适合您,则将其替换为复选框 id 'menu_item_id'

然后编写normail javascript函数来禁用输入框

function changeStatus(obj){
if(obj.checked){
document.getElementById("quantity").disabled =true;
}

单行JS是用下一行,它会在两种状态之间切换

document.getElementById("quantity").disabled =obj.checked;

更新:检查以下代码是否适合您

echo $this->Form->checkbox('menu_item_id_'.$i,
                            array(
                                    'value' => $items[$i]['MenuItem']['menu_item_id'],
                                    'hiddenField' => false,
                                    'name' => 'data[OrderItem][menu_item_id][]',
                                    'label' => false,
                                    'div' => false,
                                     "onclick'=>'changeStatus(this,$i);"
                                    )
                                ); 

echo $this->Form->input('quantity_'.$i, 
                        array(
                            'style'=>'width:65px; height:25px;',
                            'name' => 'data[OrderItem][quantity][]',
                            'div' => false,
                            'label' => false
                            )
                        );


 function changeStatus(obj,index){
     document.getElementById("quantity_"+index).disabled = ! obj.checked;
    }
于 2013-04-29T09:22:17.907 回答