【问题标题】:disable/enable text-box depending on check-boxes根据复选框禁用/启用文本框
【发布时间】:2013-04-29 09:06:41
【问题描述】:

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

如何在选中复选框时启用文本框,并在未选中时禁用它?我尝试了javascript,但它不起作用,我认为这是因为我的“id”。我应该如何声明我的“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");
            }
        }
    

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

【问题讨论】:

  • 请发布生成的标记,而不是 PHP 源代码
  • 所以你真正的问题是,在 CakePHP 中 - 如何为 Text Input.am 的 id 属性赋值,对吗?
  • @gnanz,是的。有点。以及如何在其上添加 javascript。
  • 警报仅用于测试。 :)
  • 对于任何元素都没有 enabled 这样的属性。您应该使用disabled=truedisabled=false。或者你可以使用element.setAttribute("disabled", true);element.removeAttribute("disabled");

标签: javascript cakephp cakephp-2.0


【解决方案1】:

通过 dfault cakephp 将 id 分配给具有正常约定的任何元素,即UsersMenuItemId(我假设 users 是您的模型)。但是您可以使用其他 htmlOptions 来分配 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>

【讨论】:

    【解决方案2】:

    复选框数组=>添加

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

    如果 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;
        }
    

    【讨论】:

    • 我必须在我的复选框数组中添加“id”吗?我不确定我是否做对了,但这对我不起作用。
    • 更新了我的答案,立即查看
    • 我尝试传递索引,但结果发现 $i 没有在函数 changeStatus() 中传递。
    • 你能在浏览器中检查使用“查看源代码”选项生成的html源代码是如何生成的吗
    【解决方案3】:
    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 必须是唯一的。

    【讨论】:

    • 我明白你的意思。鉴于这些复选框是由 for 循环生成的,那么命名我的 id 的正确方法应该是什么?
    • 要使用 jquery,您可以使用类而不是 id,因为类不是唯一的或使用 id 的其他方式是您可以附加任何带有 id 的循环变量,例如:i+"your_id",其中 i 是循环将在每个循环(i++)上递增的变量。
    猜你喜欢
    • 2011-06-02
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多