Javascript 根据复选框禁用/启用文本框
我正在使用cakePHP框架来处理我的项目 如何在复选框处于选中状态时启用文本框,在复选框处于未选中状态时禁用文本框?我尝试了javascript,但它不起作用,我想这是因为我的“id”。我应该如何声明我的“id” 这是我的密码。这是一个循环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
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++)。