Javascript 根据复选框禁用/启用文本框

Javascript 根据复选框禁用/启用文本框,javascript,cakephp,cakephp-2.0,Javascript,Cakephp,Cakephp 2.0,我正在使用cakePHP框架来处理我的项目 如何在复选框处于选中状态时启用文本框,在复选框处于未选中状态时禁用文本框?我尝试了javascript,但它不起作用,我想这是因为我的“id”。我应该如何声明我的“id” 这是我的密码。这是一个循环 echo $this->Form->checkbox('menu_item_id', array( 'value' => $i

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

如何在复选框处于选中状态时启用文本框,在复选框处于未选中状态时禁用文本框?我尝试了javascript,但它不起作用,我想这是因为我的“id”。我应该如何声明我的“id”

这是我的密码。这是一个循环


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");
            }
        }
    


*警报用于测试。它会转到正确的块,但不会启用/禁用文本字段。你知道为什么吗?

复选框中添加

"onclick'=>'changeStatus(this);"
如果关键字不适用于您,则将其替换为复选框id“menu\u item\u id”

然后编写normail javascript函数来禁用inputbox

单行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;
    }

复选框中数组=>添加

"onclick'=>'changeStatus(this);"
如果关键字不适用于您,则将其替换为复选框id“menu\u item\u id”

然后编写normail javascript函数来禁用inputbox

单行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;
    }

通过dfault,cakephp将id分配给具有正常约定的任何元素,即
UsersMenuItemId
(我假设这里的用户就是您的模型)。但您可以使用其他HTMLOPTION来分配id,如

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>

$(文档).ready(函数(){
$('#我的复选框')。事件('单击',函数(){
如果($(“#我的复选框”)。是(“:选中”){
$(“#输入#字段”).removeAttr('disabled');
}否则{
$(“#输入_字段”).attr('disabled','disabled');
}
});
});

dfault cakephp将id分配给任何具有常规约定的元素,即
UsersMenuItemId
(我假设这里的用户就是您的模型)。但您可以使用其他HTMLOPTION来分配id,如

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>

$(文档).ready(函数(){
$('#我的复选框')。事件('单击',函数(){
如果($(“#我的复选框”)。是(“:选中”){
$(“#输入#字段”).removeAttr('disabled');
}否则{
$(“#输入_字段”).attr('disabled','disabled');
}
});
});
这里您声明的第一个字段“menu\u item\u 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在页面上必须是唯一的

这里您声明的第一个字段“menu\u item\u 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在页面上必须是唯一的。

请发布生成的标记,而不是PHP源代码,因此您真正的问题是,在CakePHP中,如何为文本输入的id属性赋值。我说得对吗?@gnanz,是的。某种程度上。以及如何在其上添加javascript。警报仅用于测试。:)对于任何元素,都没有
enabled
这样的属性。您应该使用
disabled=true
disabled=false
。或者可以使用
element.setAttribute(“disabled”,true)
元素。删除属性(“禁用”)请发布生成的标记,而不是PHP源代码,因此您真正的问题是,在CakePHP中-如何为文本输入的id属性赋值。我说得对吗?@gnanz,是的。某种程度上。以及如何在其上添加javascript。警报仅用于测试。:)对于任何元素,都没有
enabled
这样的属性。您应该使用
disabled=true
disabled=false
。或者可以使用
element.setAttribute(“disabled”,true)
元素。删除属性(“禁用”)是否必须在复选框数组中添加“id”?我不确定我是否做了正确的事情,但它对我不起作用。更新了我的答案,现在检查我尝试传递索引,但结果发现它$i没有在函数changeStatus()中传递。你可以在浏览器中检查使用“查看源代码”选项生成的html源代码的生成方式吗?我是否必须在复选框数组中添加“id”?虽然我不确定我做的是否正确,但它对我不起作用。更新了我的答案,立即检查我尝试传递索引,但结果证明它$i没有在函数changeStatus()中传递。你能检查一下浏览器中使用“查看源代码”选项生成的html源代码,了解代码是如何生成的吗?我明白你的观点。假设这些复选框是由for循环生成的,那么命名我的id的正确方法应该是什么呢?要使用jquery,您可以使用class而不是id,因为类不是唯一的,或者使用id的其他方法是您可以使用id附加任何循环变量,比如:i+“your_id”,其中i是循环变量,它将在每个循环上递增(i++)1.我明白你的意思。假设这些复选框是由for循环生成的,那么命名我的id的正确方法应该是什么呢?要使用jquery,您可以使用class而不是id,因为类不是唯一的,或者使用id的其他方法是您可以使用id附加任何循环变量,比如:i+“your_id”,其中i是循环变量,它将在每个循环上递增(i++)。