2013-04-29 6 views
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"); 
      } 
     } 
    

* предупреждения для тестирования. он переходит в соответствующий блок, но он не включает/отключает текстовое поле. Вы знаете, почему?

+0

Пожалуйста, разместите разметку, сгенерированную вместо исходного кода PHP – fcalderan

+0

, так что ваш реальный вопрос: в CakePHP - как присвоить значение атрибуту id Text Input.am? – gnanz

+0

@gnanz, да. вроде. а также о том, как добавить в него javascript. Предупреждения – rukshiin

ответ

0

В флажком массив => добавить

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

если это ключевое слово не работает для вас, то заменить, что с CheckBox ид 'menu_item_id'

затем написать normail Javascript функция отключения InputBox

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

Однолинейная JS является использование ниже линии, она будет переключаться между двумя состояниями

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

Update: Проверьте, правильно ли работает код ниже для вас

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; 
    } 
+0

Мне нужно добавить 'id' в мой блок checkbox? я не уверен, хотя, если я делаю правильно, но это не работает для меня. – rukshiin

+0

внесли некоторые изменения в мой код. – rukshiin

+0

Обновлен мой ответ, сейчас проверяем – gnanz

1

По dfault CakePHP присваивает id любому элементу с нормальным соглашением, который равен UsersMenuItemId (я предполагаю, что ваша модель здесь принадлежит вашим пользователям). Но вы можете присвоить идентификатор с другим 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> 
+0

внесла некоторые изменения в мой код. – rukshiin

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» для имени таблицы или мы можем сказать название модели ,

есть другой вариант для присвоения идентификатора для входа как:

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' 
             ) 
            ); 

, но имейте в виду, что идентификатор должен быть уникальным на этой странице.

+0

Получаю ваше мнение. Учитывая, что эти флажки генерируются for-loop, какой должен быть правильный способ именования моего идентификатора? – rukshiin

+0

для использования jquery вы можете использовать класс вместо id, потому что классы не являются уникальными или другим способом использования id, вы можете добавить любую переменную цикла с id, например: i + «your_id», где i - переменная цикла, которая будет увеличиваться в каждом цикле (я ++). –

Смежные вопросы