Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

116
Vistas
Activación del evento de envío después del cambio al cargar una imagen en el marco Yii2

Estoy tratando de guardar un archivo de tipo de imagen usando jquery para activar el envío. Encontré un problema en el que se activa incluso cuando el evento de cambio no se realiza.

Ver crear.php:

 <?php \yii\bootstrap4\ActiveForm::begin([ 'options' => [ 'enctype' => 'multipart/form-data', 'id' => 'dynamic-form' ] ]) ?> <button class="btn btn-primary btn-file"> Select Thumbnail <input type="file" id="recipeThumbnail" name="recipe"> </button> <?php \yii\bootstrap4\ActiveForm::end() ?>

En esta vista, especifico el id para llamarlo en el archivo javascipt.

Js aplicación.js:

 $(function () { 'use strict'; $('#recipeThumbnail').change(ev => { $(ev.target).closest('form').trigger('submit'); }) });

Según tengo entendido aquí, el activador ('enviar') solo debe ejecutarse cuando hay un cambio que, en este caso, se selecciona un archivo de imagen. Sin embargo, sospecho que el evento se activa y provocó un error de intento de leer la propiedad "nombre" en nulo del modelo a continuación en la línea $this->name = $this->receta->name; . Mi otra sospecha sería un error en el modelo, pero no puedo entender dónde o cómo podría ser.

Modelo receta.php:

 public function save($runValidaiton = true, $attributeNames = null) { $isInsert = $this->isNewRecord; if ($isInsert) { $this->recipe_id = Yii::$app->security->generateRandomString(16); $this->name = $this->recipe->name; } $saved = parent::save($runValidaiton, $attributeNames); if (!$saved) { return false; } if ($isInsert) { $recipePath = Yii::getAlias('@frontend/web/storage/thumbnail/' . $this->recipe_id . '.jpg'); if (!is_dir(dirname($recipePath))) { FileHelper::createDirectory(dirname($recipePath)); } $this->recipe->saveAs($recipePath); } return true; }

Controlador RecetaController.php:

 public function actionCreate() { $model = new Recipe(); $model->recipe = UploadedFile::getInstanceByName('recipe'); if ($this->request->isPost) { if (Yii::$app->request->isPost && $model->save()) { return $this->redirect(['view', 'recipe_id' => $model->recipe_id]); } } else { $model->loadDefaultValues(); } return $this->render('create', [ 'model' => $model, ]); }

Espero haberme explicado bien. ¿Este error es realmente causado por el js o por alguna otra cosa? Cualquier idea sobre este problema es muy apreciada: D

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Perspectivas de @ChrisG y @CBroe,

El problema era envolver la etiqueta de entrada en una etiqueta de botón que haría clic en el botón y en la entrada al mismo tiempo, lo que provocaría el error. Una solución fácil sería agregar type="button" en la etiqueta del botón.

Pero esto es en realidad un HTML roto, ya que un elemento interactivo no debe anidarse entre sí. La solución a esto sería usar formularios y etiquetas con el botón para que sea un html decente.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda