1

私は自分のプロジェクトで作業するために 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");
            }
        }
    

*アラートはテスト用です。適切なブロックに移動しますが、テキストフィールドを有効/無効にしません。理由はわかりますか?

4

3 に答える 3

1

デフォルトでは、cakephp は通常の規則で任意の要素に id を割り当てUsersMenuItemIdます (ここではユーザーがあなたのモデルであると想定しています)。ただし、次のような他の 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>
于 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;
}

1 行の JS は下の行を使用し、2 つの状態を切り替えます

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 に答える