2011-12-29 2 views
1

를 사용하여 드롭 다운 메뉴에서 옵션을 선택에 난 비활성 동적 선택에 대한 설명 텍스트 상자를 표시 할 수있는 방법어떻게 ...이 사용하고있는 드롭 다운입니다 아약스

<?php echo $form->labelEx($model,'status'); ?> 
      <?php echo $form->dropDownList($model,'status', 
array('0' =>'In active', '1'=> 'Active'), 
array('onChange' => 'javascript:description()')); ?> 

을 ... 텍스트 상자를 표시합니다

초보자

에 대한 몇 가지 YII의 + 아약스 자습서를 제안 해주십시오

답변

6

당신이 할하려고하고 실제로 매우 간단하고, YII의 jQuery를 캡슐화 덕분에, 당신은 JQuery와에 대해 걱정할 필요가 없습니다 암호. 참조는 다음과 같습니다. http://www.yiiframework.com/wiki/24/creating-a-dependent-dropdown#hh0 어쨌든, 어떻게하는지 보여 드리겠습니다. 그러나 내가 당신에게 질문하기 전에 :이 코드 줄은 : array('onChange' => 'javascript:description()')이 문제를 해결하려는 시도였습니까? 아니면이 주제와 관련없는 다른 기능이 있습니까? 문제를 해결하려는 시도의 일부인 경우 삭제하십시오. 그럴 필요 없어. 전에 말했듯이 실제 jquery 코드에 대해 걱정할 필요가 없습니다. Yii에 잘 캡슐화되어 있습니다. 다른 방법으로,이 주제와 관련이 없다면, 물론 그것이 어디에 있는지 알려주십시오.

이제 아약스 업데이트에 대해 알아보십시오. 먼저 모두 텍스트 상자가 표시 될 div가 필요합니다. description_id div를 사용하겠습니다. 당신은 우리가 아약스 요청을 트리거 할 때 호출되는 함수를 지정 아약스 선언의 'URL'속성 것을 알 수 있습니다

<?php echo $form->labelEx($model,'status'); ?> 
<?php echo $form->dropDownList($model,'status', 
array('0' =>'In active', '1'=> 'Active'), 
array('onChange' => 'javascript:description()', 
     'ajax'=>array(
      'type'=>'POST', 
      'url'=>CController::createUrl('YourController/actionWhichEchoesTheTextBox'), 
      'update'=>'#description_id', 
))); 
?> 
<div id="description_id"> 
</div> 

다음() 그런 다음, 아약스 요청은 드롭 다운리스트 내에서 지정됩니다. 'update'속성에서 우리는 div를 지정했는데 where는 url 속성에 지정된 함수를 호출 한 결과를 표시합니다.

마지막으로해야할 일은 actionWhichEchoesTheTextBox() 액션을 선언하는 것입니다. 모든 컨트롤러에서 선언 할 수 있지만 현재 컨트롤러에없는 경우 정적 메서드로 선언해야 여기에 액세스 할 수 있습니다. 어떤 문제를 방지 할 수 있도록, 현재 컨트롤러를 선언해야하며, 그것은 다음과 같이 보일 것입니다 :

public function actionWhichEchoesTheTextBox() 
    { 
     if($_POST['ModelName']['status']===0) 
     echo CHtml::textField("ModelName", 'description'/*attribute name*/) ; 
    } 

을 그리고 그것 뿐이다.

3

우리는 오늘 저녁 얼마나 심지어 단지 내가했던 것과 같은 일이 ..

invisibl 될 것 사업부를 만들 e와 기본적으로 양식의 일반 이름에 따라 이름을 설정할 수있는 텍스트 상자와 레이블을 포함 할 것입니다 ...

설명 기능 onChange를 이미 추가 했으므로 해당 기능에서 블록으로 div ..

모델에서 거기에없는 경우에는 해당 필드의 필드에 변수 이름을 포함시켜야합니다. alreay .... (여기에서 가져올 수 있다고 가정합니다 ...)

<?php echo $form->labelEx($model,'status'); ?> 
<?php echo $form->dropDownList($model,'status', 
array('0' =>'In active', '1'=> 'Active'), 
array('onChange' => 'javascript:description(this.selectedIndex)')); 
?> 
<div id="description_id" style="display:none;"> 
<laabel for="...">.. 
<textarea name="ModelName[description]">.... 
</div> 
<script> 
function description(id) 
{ 
if(id==0) 
document.getElementById("description_id").style.display="block"; 
} 
</script> 
0

값이 생성 된 동적 필드의 변수 $_POST에 없습니다. 즉 div 태그 사이에 생성 된 입력란

관련 문제