Yii, javascript 禁止某个字段进入Undefined Index
Yii, javascript disables a certain field into Undefined Index
所以我的 _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
将被禁用并提交。但是当我点击表单中的按钮 'Save' 时,它显示
Error 500: Undefined index clientPackagedService_id
但如果我选择选项“0”并提交,一切正常。 service_id
没有任何问题。
下面是我对 2 个下拉菜单的代码:
<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 -->
UPDATES 进一步调试后~
我找到了它这样做的原因。
$("#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 服务器端,因此,添加隐藏字段将解决问题
所以我的 _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
将被禁用并提交。但是当我点击表单中的按钮 'Save' 时,它显示
Error 500: Undefined index clientPackagedService_id
但如果我选择选项“0”并提交,一切正常。 service_id
没有任何问题。
下面是我对 2 个下拉菜单的代码:
<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 -->
UPDATES 进一步调试后~
我找到了它这样做的原因。
$("#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 服务器端,因此,添加隐藏字段将解决问题