所以我在_form.php中有2个dropDownList,而我有一个包含2个选项的radioButtonList

我的问题是,当我禁用其中一个时,应该禁用其中一个下拉菜单。它确实禁用了,但是其中一个将变成未定义索引,而另一个禁用时工作正常。

这是我的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');
        }
        else if(this.value == '1'){
            $("#Booking_service_id").prop("disabled", false);
            $("#Booking_clientPackagedService_id").prop("disabled", true);
            $("#Booking_clientPackagedService_id").val('0');
        }
    });
})


好的,这就是发生的情况。如您所见,如果我单击选项“ 1”,则Booking_clientPackagedService_id将被禁用并被提交。但是当我单击表单中的“保存”按钮时,它说

Error 500: Undefined index clientPackagedService_id


但是,如果我选择选项“ 0”并提交,则一切正常。 service_id没有任何问题。

下面是我的代码到2 dropDowns:

<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 class="row">
    <?php echo $form->labelEx($model,'service_id'); ?>
    <?php echo $form->dropDownList($model, 'service_id',  GxHtml::listDataEx(Service::model()->findAllAttributes(null, true)),
        array(
            //'disabled'=>'disabled',
            'prompt' => 'Select Service....',
            'ajax' => array( 'type'=>'POST', //request type
                'url'=>CController::createUrl('updateMasseuseAndStationListSID'), //url to call.
                'data'=>array('service_id'=>'js:this.value', 'dt'=>'js:$("#Booking_date").val()', 'timeStart'=>'js:$("#Booking_timeStart").val()'),
                'dataType'=>'json',
                'success'=>'js:function(data) {
                    //alert(data.masseuse);
                    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,'service_id'); ?>
    </div><!-- row -->


更新进一步调试后〜

我发现了这样做的原因。

$("#Booking_clientPackagedService_id").prop("disabled", true);
$("#Booking_clientPackagedService_id").val('0');


这两条线是原因。谁能告诉我吗?谢谢〜

进一步调试后的更新>。
我在actionCreate()中有一个函数:

$model->bookService($_POST['Booking']['clientPackagedService_id']);


基本上,当下拉列表被禁用时,此方法将无法通过,因此抛出error 500 clientPackagedService_id Undefined index

最佳答案

只需在下拉列表中添加一个隐藏的重复字段,在这种情况下,

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

由于disabled下拉列表不会将POST / GET发送到PHP服务器端,因此,添加隐藏字段将解决该问题。

关于javascript - Yii,javascript禁用了未定义索引中的某个字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29668697/

10-10 00:46
查看更多