Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript yii模态对话框上的活动表单验证_Javascript_Twitter Bootstrap_Validation_Yii_Modal Dialog - Fatal编程技术网

Javascript yii模态对话框上的活动表单验证

Javascript yii模态对话框上的活动表单验证,javascript,twitter-bootstrap,validation,yii,modal-dialog,Javascript,Twitter Bootstrap,Validation,Yii,Modal Dialog,我正在尝试验证模态对话框上的CActiveForm。我使用引导。 问题是模态对话框。当我在加载主html页面的过程中读取表单内容时,JavaScript验证工作正常,但当我单击按钮加载内容时,验证Scripts就消失了。 这是呼叫页面的视图 <?php /* @var $this SiteController */ $this->pageTitle=Yii::app()->name . ' - Все магазины'; $this->breadcrumbs=arra

我正在尝试验证模态对话框上的CActiveForm。我使用引导。 问题是模态对话框。当我在加载主html页面的过程中读取表单内容时,JavaScript验证工作正常,但当我单击按钮加载内容时,验证Scripts就消失了。 这是呼叫页面的视图

<?php
/* @var $this SiteController */

$this->pageTitle=Yii::app()->name . ' - Все магазины';
$this->breadcrumbs=array(
    'Shops',
);

$jsCreate = "$(\".createShop\").click(function(){
    var target = $(this).attr('data-target');
    var url = '?r=site/editShop';
    $(target).find(\".modal-dialog\").load(url);
});";
Yii::app()->getClientScript()->registerScript('create-shop-script',$jsCreate,CClientScript::POS_READY);

$jsEdit = "$(\".editShop\").click(function(){
    var target = $(this).attr('data-target');
    var url = $(this).attr('href');
    $(target).find(\".modal-dialog\").load(url);
});";
Yii::app()->getClientScript()->registerScript('edit-shop-script',$jsEdit,CClientScript::POS_READY);


$jsDelete = "$(\".deleteShop\").click(function(){
    var target = $(this).attr('data-target');
    var url = $(this).attr('href');
    $(target).find(\".modal-dialog\").load(url);
});";
Yii::app()->getClientScript()->registerScript('delete-shop-script',$jsDelete,CClientScript::POS_READY);
?>

<h2>Все объекты</h2>
 <!-- I created separate dialog for shop and warning because on open it shows the previous content while forming the new one 
      and I don't want to show shop elements on warning and vise versa -->
<!-- modal dialog for shop -->
<div id="shopModal" class="modal fade" aria-hidden="true" style="display: none;">
    <div class="modal-dialog">

    </div>
</div>

<!-- modal warning dialog -->
<div id="warningModal" class="modal fade" aria-hidden="true" style="display: none;">
    <div class="modal-dialog">

    </div>
</div>

<table class="table table-hover">
    <thead>
        <tr>
            <th>Название <span class="hidden-xs">объекта</span></th>
            <th><span class="glyphicon glyphicon-ok visible-xs"  data-toggle="tooltip" title="Статус активности"></span><span class="hidden-xs">Статус</span></th>
        </tr>
    </thead>
    <?php foreach($shops as $shop) :?>
    <?php $disabled = ($shop->active) ?'' :'gray'?>
    <tr>            
                <td><span class="<?php echo $disabled; ?>"><?php echo $shop->name; ?></span></td>
                <td>
                    <?php echo ($shop->active) ?"<span data-toggle='tooltip' title='Активен' class='glyphicon glyphicon-eye-open'></span>" :"<span data-toggle='tooltip' title='Неактивен' class='glyphicon glyphicon-eye-close'></span>" ?>
                    &nbsp; <a data-toggle='modal' data-target='#shopModal' class="editShop" href="?r=site/editShop&amp;id=<?php echo $shop->id; ?>"><span data-toggle='tooltip' title='Редактировать объект' class="glyphicon glyphicon-edit"></span></a>
                    &nbsp; <a data-toggle='modal' data-target='#warningModal' class="deleteShop" href="?r=site/deleteShop&amp;id=<?php echo $shop->id; ?>"><span data-toggle='tooltip' title='Удалить объект' class="glyphicon glyphicon-remove-circle"></span></a>
                </td>
    </tr>
    <?php endforeach; ?>
</table>
<button style='float:right;' data-toggle='modal' data-target='#shopModal' class="createShop btn btn-primary"><span data-toggle="tooltip" title="Добавить объект"><span class="glyphicon glyphicon-plus"></span> <span class="hidden-xs">Добавить объект</span></span></button>
public function actionEditShop($id=null)
{
        if (!$this->checkAuthenticated()) return;


       if(isset($_POST['ajax']) && $_POST['ajax']==='shop-form')
        {
          echo CActiveForm::validate($model);
            Yii::app()->end();
        }
        $model = $this->loadShop($id);
        if(isset($_POST['Shops']))
        {   
            // create/update shop               
            $fields = $_POST['Shops'];
            $fields['id'] = $id;
            $model->attributes=$fields;

            if($model->save())
                    $this->redirect(array('shops'));
        } else {
            // open form to create/update                
            $this->renderPartial('classifier',array('model'=>$model, 'title'=>'Объект', 'url'=>'?r=site/editShop'), false, true);
        }
}

    public function actionDeleteShop($id, $confirmed=null)
{
        if (!$this->checkAuthenticated()) return;
        $model = $this->loadShop($id);
        if (isset($confirmed)){
    $model->delete();
    $this->redirect(array('shops'));
        } else {
            $this->renderPartial('warning',array('url'=>"?r=site/deleteShop&id=$id&confirmed=1",));
        }
}

    private function loadShop($id=null)
{
        if ($id){
    $model=Shops::model()->findByPk($id);
    if($model===null)
        throw new CHttpException(404,"Объект под номером $id не существует.");
        } else {
            $model = new Shops; // creates with active='1'
            $model->active = '1';
        }
        return $model;
}

您需要明确告诉控制器使用的
processOutput
参数包含脚本。设置时,将调用以下命令:

render()
生成的输出进行后处理。调用此方法 在渲染
()
renderText()
的末尾。如果有注册 客户端脚本,此方法将在 适当的地方。如果有动态内容,它们也将 插入。此方法还可以将持久页面状态保存在 页面中有状态表单的隐藏字段

您还应该取消注释

$this->performAjaxValidation($model);

看看你是否使用了
processOutput

我改变了,但是现在代码中没有出现验证脚本?对不起。有一个不正确的部分。现在我改变了所有部分。请注意,表单在呈现页面后加载到模式对话框中,因此验证javascript不会出现在结果页面上。我将其与Yii登录对话框进行了比较。将表单移动到模式对话框后,有两个验证脚本不存在。这些丢失的脚本是您自己的还是默认的Yii脚本?
public function actionEditShop($id=null)
{
        if (!$this->checkAuthenticated()) return;


       if(isset($_POST['ajax']) && $_POST['ajax']==='shop-form')
        {
          echo CActiveForm::validate($model);
            Yii::app()->end();
        }
        $model = $this->loadShop($id);
        if(isset($_POST['Shops']))
        {   
            // create/update shop               
            $fields = $_POST['Shops'];
            $fields['id'] = $id;
            $model->attributes=$fields;

            if($model->save())
                    $this->redirect(array('shops'));
        } else {
            // open form to create/update                
            $this->renderPartial('classifier',array('model'=>$model, 'title'=>'Объект', 'url'=>'?r=site/editShop'), false, true);
        }
}

    public function actionDeleteShop($id, $confirmed=null)
{
        if (!$this->checkAuthenticated()) return;
        $model = $this->loadShop($id);
        if (isset($confirmed)){
    $model->delete();
    $this->redirect(array('shops'));
        } else {
            $this->renderPartial('warning',array('url'=>"?r=site/deleteShop&id=$id&confirmed=1",));
        }
}

    private function loadShop($id=null)
{
        if ($id){
    $model=Shops::model()->findByPk($id);
    if($model===null)
        throw new CHttpException(404,"Объект под номером $id не существует.");
        } else {
            $model = new Shops; // creates with active='1'
            $model->active = '1';
        }
        return $model;
}
$this->performAjaxValidation($model);