当前位置: 首页 > 知识库问答 >
问题:

Yii2表格在填写单个字段时自动提交

公羊浩气
2023-03-14

我有一个问题,当我完成表单上的一个字段并使用Tab键或鼠标移动到另一个字段时,表单会自动提交并转到actionCreate或actionEdit(视情况而定)中指定的页面。如果我重新打开表单,则该单个数据元素已保存,并且我可以再输入一个数据元素,但只要移动到另一个字段,表单就会自动重新提交。

一些背景资料:

  • 这种行为发生在Google Chrome v.56上。x和Firefox v.52。x、 Microsoft Edge不会出现这种情况。(在Edge中,表单可以正常工作。不幸的是,我真的需要Chrome和Firefox中更强大的开发工具。)
  • 我正在使用带有XAMPP堆栈的本地主机(Apache 2.4.23(Win32)、PHP 5.6.28、Yii 2.0.11.2)
  • 此问题发生在gii生成的所有表格(许多)上
  • 无论我使用标准Yii ActiveForm还是Kartik-V ActiveForm,都会发生这种行为
  • Apache日志没有显示任何错误。Yii运行时/日志/应用程序。日志也没有显示错误

这种行为已经持续了很长时间;我一直在努力解决这个问题。现在,我真的需要做点什么了。我试着在谷歌上搜索,看看是否有人发现了这个问题,但没有在网上找到任何可能的解决方案。

我有点不知所措,不知下一步该怎么办。考虑到表单非常标准,并且在Edge中也能正常工作,我认为这可能更像是Chrome/Firefox/localhost问题,而不是Yii问题,但我找不到任何关于行为的信息。

我非常感谢任何人提出的想法、想法,尤其是解决方案。

一个示例控制器(与此行为相关的许多控制器之一:

<?php
// This class was automatically generated by a giiant build task
// You should not change it manually as it will be overwritten on next build

    namespace backend\controllers\base;

    use common\models\PaletteColors;
    use common\models\search\PaletteColorsSearch;
    use yii\web\Controller;
    use yii\web\HttpException;
    use yii\helpers\Url;
    use yii\filters\AccessControl;
    use dmstr\bootstrap\Tabs;

    /**
     * PaletteColorsController implements the CRUD actions for PaletteColors model.
     */
    class PaletteColorsController extends Controller
    {

        /**
         * @var boolean whether to enable CSRF validation for the actions in this controller.
         * CSRF validation is enabled only when both this property and [[Request::enableCsrfValidation]] are true.
         */
        public $enableCsrfValidation = false;

        /**
         * Lists all PaletteColors models.
         *
         * @return mixed
         */
        public function actionIndex()
        {
            $searchModel  = new PaletteColorsSearch;
            $dataProvider = $searchModel->search($_GET);

            Tabs::clearLocalStorage();

            Url::remember();
            \Yii::$app->session['__crudReturnUrl'] = null;

            return $this->render('index', [
                'dataProvider' => $dataProvider,
                'searchModel'  => $searchModel,
            ]);
        }

        /**
         * Displays a single PaletteColors model.
         *
         * @param integer $id
         *
         * @return mixed
         */
        public function actionView($id)
        {
            \Yii::$app->session['__crudReturnUrl'] = Url::previous();
            Url::remember();
            Tabs::rememberActiveState();

            return $this->render('view', [
                'model' => $this->findModel($id),
            ]);
        }

        /**
         * Creates a new PaletteColors model.
         * If creation is successful, the browser will be redirected to the 'view' page.
         *
         * @return mixed
         */
        public function actionCreate()
        {
            $model = new PaletteColors;

            try {
                if ($model->load($_POST) && $model->save()) {
                    return $this->redirect(['view', 'id' => $model->id]);
                } elseif (!\Yii::$app->request->isPost) {
                    $model->load($_GET);
                }
            } catch (\Exception $e) {
                $msg = (isset($e->errorInfo[2])) ? $e->errorInfo[2] : $e->getMessage();
                $model->addError('_exception', $msg);
            }

            return $this->render('create', ['model' => $model]);
        }

        /**
         * Updates an existing PaletteColors model.
         * If update is successful, the browser will be redirected to the 'view' page.
         *
         * @param integer $id
         *
         * @return mixed
         */
        public function actionUpdate($id)
        {
            $model = $this->findModel($id);

            if ($model->load($_POST) && $model->save()) {
                return $this->redirect(Url::previous());
            } else {
                return $this->render('update', [
                    'model' => $model,
                ]);
            }
        }

        /**
         * Deletes an existing PaletteColors model.
         * If deletion is successful, the browser will be redirected to the 'index' page.
         *
         * @param integer $id
         *
         * @return mixed
         */
        public function actionDelete($id)
        {
            try {
                $this->findModel($id)->delete();
            } catch (\Exception $e) {
                $msg = (isset($e->errorInfo[2])) ? $e->errorInfo[2] : $e->getMessage();
                \Yii::$app->getSession()->addFlash('error', $msg);

                return $this->redirect(Url::previous());
            }

// TODO: improve detection
            $isPivot = strstr('$id', ',');
            if ($isPivot == true) {
                return $this->redirect(Url::previous());
            } elseif (isset(\Yii::$app->session['__crudReturnUrl']) && \Yii::$app->session['__crudReturnUrl'] != '/') {
                Url::remember(null);
                $url                                   = \Yii::$app->session['__crudReturnUrl'];
                \Yii::$app->session['__crudReturnUrl'] = null;

                return $this->redirect($url);
            } else {
                return $this->redirect(['index']);
            }
        }

        /**
         * Finds the PaletteColors model based on its primary key value.
         * If the model is not found, a 404 HTTP exception will be thrown.
         *
         * @param integer $id
         *
         * @return PaletteColors the loaded model
         * @throws HttpException if the model cannot be found
         */
        protected function findModel($id)
        {
            if (($model = PaletteColors::findOne($id)) !== null) {
                return $model;
            } else {
                throw new HttpException(404, 'The requested page does not exist.');
            }
        }
    }

这张"表格"。与此控制器关联的php文件:

<?php

    use kartik\helpers\Html;
    use kartik\icons\Icon;
    use kartik\tabs\TabsX;
    use kartik\widgets\ActiveForm;

    // Initialize framework as per <code>icon-framework</code> param in Yii config
    Icon::map($this);

    // Initialize a specific framework - e.g. Web Hosting Hub Glyphs
    Icon::map($this, Icon::FA);

    /**
     * @var yii\web\View                $this
     * @var common\models\PaletteColors $model
     * @var yii\widgets\ActiveForm      $form
     */

?>

<div class="palette-colors-form">

    <?php $form = ActiveForm::begin([
                                        'id'                   => 'PaletteColors',
                                        'type'                 => ActiveForm::TYPE_VERTICAL,
                                        // 'enctype' => 'multipart/form-data',
                                        'enableAjaxValidation' => true,
                                        'fieldConfig'          => [
                                            'autoPlaceholder' => false,
                                            'showErrors'      => true,
                                        ],
                                    ]
    );
    ?>

    <div class="">
        <?php $this->beginBlock('main'); ?>

        <p>

            <!-- attribute palette_id -->
            <?= // generated by schmunk42\giiant\generators\crud\providers\core\RelationProvider::activeField
                $form->field($model, 'palette_id')->dropDownList(
                    \yii\helpers\ArrayHelper::map(common\models\Palettes::find()->all(), 'id', 'name'),
                    [
                        'prompt'   => 'Select',
                        'disabled' => (isset($relAttributes) && isset($relAttributes['palette_id'])),
                    ]
                ); ?>

            <!-- attribute palette_color_group_id -->
            <?= // generated by schmunk42\giiant\generators\crud\providers\core\RelationProvider::activeField
                $form->field($model, 'palette_color_group_id')->dropDownList(
                    \yii\helpers\ArrayHelper::map(common\models\PaletteColorGroups::find()->all(), 'id', 'name'),
                    [
                        'prompt'   => 'Select',
                        'disabled' => (isset($relAttributes) && isset($relAttributes['palette_color_group_id'])),
                    ]
                ); ?>

            <!-- attribute rgba_red -->
            <?= $form->field($model, 'rgba_red')->textInput() ?>

            <!-- attribute rgba_green -->
            <?= $form->field($model, 'rgba_green')->textInput() ?>

            <!-- attribute rgba_blue -->
            <?= $form->field($model, 'rgba_blue')->textInput() ?>

            <!-- attribute hsla_hue -->
            <?= $form->field($model, 'hsla_hue')->textInput() ?>

            <!-- attribute hsla_saturation -->
            <?= $form->field($model, 'hsla_saturation')->textInput() ?>

            <!-- attribute hsla_luminosity -->
            <?= $form->field($model, 'hsla_luminosity')->textInput() ?>

            <!-- attribute name_common -->
            <?= $form->field($model, 'name_common')->textInput(['maxlength' => true]) ?>

            <!-- attribute rgba_alpha -->
            <?= $form->field($model, 'rgba_alpha')->textInput() ?>

            <!-- attribute hsla_alpha -->
            <?= $form->field($model, 'hsla_alpha')->textInput() ?>

            <!-- attribute cmyk_cyan -->
            <?= $form->field($model, 'cmyk_cyan')->textInput() ?>

            <!-- attribute cmyk_magenta -->
            <?= $form->field($model, 'cmyk_magenta')->textInput() ?>

            <!-- attribute cmyk_yellow -->
            <?= $form->field($model, 'cmyk_yellow')->textInput() ?>

            <!-- attribute cmyk_key -->
            <?= $form->field($model, 'cmyk_key')->textInput() ?>

            <!-- attribute radial_gradient -->
            <?= $form->field($model, 'radial_gradient')->textarea(['rows' => 6]) ?>

            <!-- attribute description -->
            <?= $form->field($model, 'description')->textarea(['rows' => 6]) ?>

            <!-- attribute comments -->
            <?= $form->field($model, 'comments')->textarea(['rows' => 6]) ?>

            <!-- attribute twb_variable -->
            <?= $form->field($model, 'twb_variable')->textInput(['maxlength' => true]) ?>

            <!-- attribute name_variant -->
            <?= $form->field($model, 'name_variant')->textInput(['maxlength' => true]) ?>

            <!-- attribute hex -->
            <?= $form->field($model, 'hex')->textInput(['maxlength' => true]) ?>

            <!-- attribute hex_web_safe -->
            <?= $form->field($model, 'hex_web_safe')->textInput(['maxlength' => true]) ?>

            <!-- attribute hex_inverted -->
            <?= $form->field($model, 'hex_inverted')->textInput(['maxlength' => true]) ?>

            <!-- attribute hex_complement -->
            <?= $form->field($model, 'hex_complement')->textInput(['maxlength' => true]) ?>
        </p>
        <?php $this->endBlock(); ?>

        <?=
            TabsX::widget(
                [
                    'encodeLabels' => false,
                    'items'        => [
                        [
                            'label'   => '<i class="fa fa-home"></i> Palette Colors',
                            'content' => $this->blocks['main'],
                            'active'  => true,
                        ],
                    ],
                    'position'     => TabsX::POS_ABOVE,
                    'encodeLabels' => false
                ]
            );
        ?>
        <hr/>

        <?php echo $form->errorSummary($model); ?>

        <div class="row">
            <div class="col-md-12 text-right">
                <?= Html::submitButton(
                    '<span class="glyphicon glyphicon-check"></span> ' .
                    ($model->isNewRecord ? 'Create' : 'Save'),
                    [
                        'id'    => 'save-' . $model->formName(),
                        'class' => 'btn btn-success'
                    ]
                );
                ?>
            </div>
        </div>

        <?php ActiveForm::end(); ?>

    </div>

</div>

共有1个答案

汝昀
2023-03-14

出于某种原因,它在activeForm中也对我起到了同样的作用,虽然我不知道确切的原因,但似乎有所帮助的是:

<?php $form = ActiveForm::begin([
    'enableClientValidation' => false,
    'enableAjaxValidation' => true,
]) ?>

<?php $form = ActiveForm::begin([
//    'enableClientValidation' => false,
//    'enableAjaxValidation' => true,
]) ?>
 类似资料:
  • 问题内容: 我有一个MySQL表和模型包含的字段,以及。我也有另一个表/模型也包含,和。 假设已经充满了桌子,和。 当我以表格形式输入数据时,当我选择与表格相关的“ 通过”下拉字段时,我希望相关和字段能够自动填写。 我的for 看起来像这样: 根据建议,在控制器中添加了以下内容: 问题答案: 您所需要的只是调用请求以获取必填字段。就像下面这样: (我不知道您的型号名称)查看您的表格,看看您的字段是

  • 问题内容: 我想知道一种如何使用ajax或curl在外部站点(PHP)的多个页面上自动填充多个表单(使用)。 例如,一个站点有一个表单,可将您带到提交表单的时间,而还有另一种表单也需要填写和提交。我想从我的本地服务器自动填写两个表格。我该如何做到? 问题答案: 最简单的方法是使用油脂类(https://addons.mozilla.org/en- US/firefox/addon/greasemo

  • 考虑到字段名称结构可能发生了变化,我尝试像第一次那样阅读format/fields。(代码如下)。但是,现在它告诉我没有要读取的字段()。 所以,我开始做一些搜索,并找到了参考另一种类型的PDF结构,他们可以切换到;XFA.老实说,我还没有找到任何令人满意的文档/示例,但我确实找到了一些代码,看起来应该可以在XFA PDF的结构中阅读。(代码如下)。我尝试了两种不同的方法。第一个基本说明XfaFi

  • 其实我是用条形码扫描器来输入字段的。如果我有3个字段,那就是: 物料条码: 物料条码: 序列条码: 步骤: 1。在物料条形码文本字段 2中扫描物料条形码。扫描条形码“项目条形码”文本字段 3中的项目条形码。在串行条码文本字段中对串行条码进行扫描,扫描后自动提交。 那么问题来了,如果所有的字段都填好了,怎么自动提交呢? 谢谢你。

  • 问题内容: 我正在尝试使用Python处理一些使用Adobe Acrobat Reader填写并签名的PDF表单。 我试过了: 该pdfminer演示:它没有任何倾倒在填写数据。 pyPdf:当我尝试使用PdfFileReader(f)加载文件时,它最大化了内核2分钟,而我只是放弃并杀死了它。 Jython和PDFBox:虽然可以很好地工作,但是启动时间却很长,如果这是我唯一的选择,我只会用纯Ja