【问题标题】:Yii, copying a dropdown value to hidden dropdownYii,将下拉值复制到隐藏的下拉列表
【发布时间】:2015-06-27 23:16:22
【问题描述】:

基本上,我想知道如何将原始下拉列表值复制到隐藏下拉列表中。

因为目前我有一个单选按钮禁用某个下拉值,但该值不会在 PHP 中发布。所以我添加了一个与原始下拉列表同名的隐藏字段,但是当它重新启用时,该字段不会复制其值。

这就是我所拥有的:

<div class="row">
    <?php echo $form->labelEx($model,'clientPackagedService_id'); ?>
    <?php $client = Client::model()->findByPk(1);?>
    <?php echo $form->dropDownList($model, 'clientPackagedService_id', CHtml::listData($client->clientPackagedservices(array('condition'=>'client_id='.$client->id.' AND booking_id IS NULL')),'id','packagedServiceInfo')
        ,array(                 
            'disabled'=>'disabled', 
            'prompt'=>'Select Packaged Service....',
            'ajax' => array( 'type'=>'POST', //request type 
                'url'=>CController::createUrl('updateMasseuseAndStationListPSID'), //url to call.
                'data'=>array('clientPackagedService_id'=>'js:this.value', 'dt'=>'js:$("#Booking_date").val()', 'timeStart'=>'js:$("#Booking_timeStart").val()'),
                'dataType'=>'json', 
                'success'=>'js:function(data) {
                    var mass="#'.CHtml::activeId($model, 'masseuse_id').'"; 
                    $(mass).html(data.masseuse); 
                    $(mass).trigger("chosen:updated"); 
                    $(mass+"_chzn").css("width","300px");
                    $(mass+"_chzn > .chzn-drop").css("width","298px");

                    var station="#'.CHtml::activeId($model, 'station_id').'"; 
                    $(station).html(data.station); 
                    $(station).trigger("chosen:updated"); 
                    $(station+"_chzn").css("width","300px");
                    $(station+"_chzn > .chzn-drop").css("width","298px"); 

                    //alert(data.timeEnd);
                    var timeEnd="#'.CHtml::activeId($model, 'timeEnd').'";
                    $(timeEnd).val(data.timeEnd);
                }',                         
            ) 
        )
    ); ?>
    <?php echo $form->error($model,'clientPackagedService_id'); ?>
</div><!-- row -->

<div>
    <?php echo $form->hiddenField($model, 'clientPackagedService_id'); ?>
</div>

这是我的 JavaScript

$(document).ready(function(){
    $('input[type=radio]').change(function(){
        if(this.value == '0'){
            $("#Booking_clientPackagedService_id").prop("disabled", false);
            $("#Booking_service_id").prop("disabled", true);
            $("#Booking_service_id").val('0');
            //I believe there's something I need to add in this line    
        }
        else if(this.value == '1'){             
            $("#Booking_service_id").prop("disabled", false); 
            $("#Booking_clientPackagedService_id").prop("disabled", true);
            $("#Booking_clientPackagedService_id").val('0');
        }
    });
})

我是否给 hiddenField 赋予与我原来的下拉菜单相同的名称,还是不应该?如果是,那么当它重新启用时,如何将原始下拉列表的值复制到 hiddenField 中?

【问题讨论】:

  • 有没有人可以帮助我?
  • 单选按钮是否必要?在你的下拉列表中添加另一个值怎么样,所以在你的控制器中你可以使用if块左右检查。 if ($_POST['Client']['clientPackagedService_id'] == '') {/*don't save the field*/}
  • 是的,单选按钮是必须的。否则它就没有它的意义。
  • 我不明白为什么,如果禁用选择中的值,您仍然想将值本身发布到服务器......如果这是您想要实现的目标。
  • 这是因为我的 actionCreate() 中有一个需要该字段的函数,而禁用它会给我一个错误 500 undefined index。这就是为什么我需要它至少向服务器发布一个空值。

标签: javascript php jquery html yii


【解决方案1】:

您可以随时检查该值是否正在发布,如果是,则执行所需的功能。否则,别管它。就我而言,我有一个需要该值的函数。所以,我在我的 actionCreate() 中添加了一个检查;

这是我的代码:

if( isset($_POST['Booking']['clientPackagedService_id']) ){
        $model->bookService($_POST['Booking']['clientPackagedService_id']); 
        $transaction->commit();
}
else {
        $transaction->commit();
}

感谢@Masiorama 的评论。如果他不发表评论,我就不会得到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多