2014-07-05 35 views
1

当我删除name时,所选下拉项目不会保存到数据库中。当我添加name字段时,它不会被保存。 name转到js输入字段将显示,并且输入字段被保存。为什么不保存选定的下拉项目呢?dropdownlist在添加js时不会保存

<td><p><?php echo $form->dropDownList($model,'product_type', CHtml::listData(ProductType::model()->findAll(),'product_type','description'), 
     array(
     'class'=>'span12', 
     'name'=>'prodType', 
     'empty'=>"-- Select Type of Product --")); ?></td>         
<td><?php echo $form->error($model,'product_type'); ?></td> 

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('p select[name="prodType"]').change(function(e){ 
       if ($('p select[name="prodType"]').val() == "Pre"){ 
       $('#pre-input').show(); 
       }else{ 
       $('#pre-input').hide(); 
       } 
      }); 
</script> 
+0

嗨一起。该名称与查询中的某些内容相冲突,只是打印出更新数据库的查询,您将看到问题 – volkinc

+0

不确定您的意思?我也改名了,同样的问题 – JamAndJammies

回答

0

你的控制器可能是这样的..

class MyController extends CController { 
    ..... 
    public function actionSaveMyForm(){ 
     .... 
     if(isset($_POST['MyModel']){ 
      $model->attributes = $_POST['MyModel']; 
      $model->save(); 
     } 
     .... 
    } 
} 

这基本上是如果MyModel数组中的$_POST设置,然后分配给所有的子数组元素模型属性,然后保存指他们。

当你不设定在dropDownList功能的name属性调用自动生成的ID属性是MyModel_<<attribute>>MyModel_product_type和名称属性是MyModel[product_type]因此,当你发送表单信息,这将是可用的$_POST['MyModel']下阵列。即产品类型可以从$_POST['MyModel']['product_type'] 因此

  if(isset($_POST['MyModel']){ 
       $model->attributes = $_POST['MyModel']; 
       $model->save(); 
      } 

检索将会分配产品类型值$model->product_type并保存它。

但是当你手动指定名称,值是gettable仅在$_POST['myCustomName]`所以你将有专门保存这样

  if(isset($_POST['MyModel']) && isset($_POST['myCustomName')){ 
       $model->attributes = $_POST['MyModel']; 
       $model->product_type = $_POST['myCustomName']; 
       $model->save(); 
      } 

则该模型将得到正确保存。

注意:除了这个,你将不得不改变你的JavaScript或表单提交代码发送的数据正确,包括您的自定义名称字段,用POST请求

+1

它的工作!感谢您的详细解释! – JamAndJammies

相关问题