JQuery - Eventos.

 
Vista:
Imágen de perfil de Nicolás Ignacio
Val: 7
Ha disminuido su posición en 2 puestos en JQuery (en relación al último mes)
Gráfica de JQuery

Eventos.

Publicado por Nicolás Ignacio (5 intervenciones) el 18/03/2020 20:21:09
Estimados, a ver a alguno que haya pasado por esto. Ocupo el plugin Select2 JQuery pero aplicado a un framework php. El hecho es que necesito capturar el evento "change", pero quiero hacerlo con vanilla js para no ir dependiendo tanto de JQuery, se que parece contradictorio ya que estoy utilizando el plugin Select2, pero es que no encontré uno similar que sea nativo o alguna manera de hacerlo a puro código y que me de tantas herramientas como este.

El caso es que tengo este código:

1
2
3
4
5
6
7
8
let province = document.getElementById('address-province_id'); // donde province_id es el input con el Select2
 
console.log(province); // esto me devuelve todo el nodo html
 
province.addEventListener('change', function(e) // no hace nada, no captura el evento
{
    console.log('Hola Mundo');
});

Leí por la red que los eventos de JQuery solo son escuchados por JQuery. Entonces consulto, alguien sabe cómo puedo escuchar el evento con JS puro o no tengo salida? debo seguir con la librería JQuery.

Por otro lado, sabe alguien alguna manera de poder poblar un campo select nativo con un json que traiga desde la base de datos a través de PHP.

Muchas gracias y espero que alguien pueda responderme. Saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Nicolás Ignacio
Val: 7
Ha disminuido su posición en 2 puestos en JQuery (en relación al último mes)
Gráfica de JQuery

Eventos.

Publicado por Nicolás Ignacio (5 intervenciones) el 18/03/2020 21:36:29
Hola Joel! Muchas gracias por tu respuesta.

Creo que no me he sabido hacer entender, no deseo crear un evento, el plugin Select2.JQuery maneja sus propios eventos, lo que necesito es escucharlo por js vanilla, osea js puro, y por lo que he podido investigar, esto no es posible porque JQuery tiene su propia capa sobre los eventos de js, entonces es por eso que si cambia el input del plugin solo puedo escucharlo a través de JQuery y no así a través de js...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 6
Ha aumentado 1 puesto en JQuery (en relación al último mes)
Gráfica de JQuery

Eventos.

Publicado por Andrés (3 intervenciones) el 18/03/2020 21:51:05
Por favor publica el código donde agregas el select a la pagina y la URL donde obtuviste el plugin porque con el método que te da Joel debería funcionar. El que ciertos plugins de jQuery ya traigan eventos prefabricados no quiere decir que no se puedan capturar con js a secas. Igualmente jQuery trae una serie de métodos prefabricados para capturar eventos pero no es independiente ni incompatible con los métodos nativos del lenguaje, todo lo contrario.

Con lo cual crear un nuevo listener para capturar el evento como lo dice Joel debería cuando menos, estar en el camino a resolver tu necesidad.

Quedamos atentos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Nicolás Ignacio
Val: 7
Ha disminuido su posición en 2 puestos en JQuery (en relación al último mes)
Gráfica de JQuery

Eventos.

Publicado por Nicolás Ignacio (5 intervenciones) el 18/03/2020 22:01:52
Hola Andrés! Muchas gracias por tu respuesta!

Mira primero inserto el enlace donde leí lo que estoy comentando pero busco algún colega que haya pasado por esto, es por esto que prefiero este foro:

https://stackoverflow.com/questions/40915156/listen-for-jquery-event-with-vanilla-js

Por otro lado te publico parte del código, aclaro que ocupo el framework Yii2 y el plugin es el Select2 de Kartik que se inspira y utiliza el plugin Select2 JQuery: https://select2.org/

Este es mi campo en el formulario:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Get provinces via ajax
$urlProv = Url::to(['province/list-provinces']);
 
// Get initial value
$province = empty($model->province_id) ? '' : Province::findOne(['id' => $model->province_id])->name;
 
echo $form->field($model, 'province_id')->widget(Select2::class, [
    'initValueText' => $province, // setear el texto inicial a mostrar
    'options' => ['placeholder' => '-- seleccione --', 'class' => 'my-province'],
    'theme' => Select2::THEME_BOOTSTRAP,
    'pluginOptions' => [
        'allowClear' => true,
        'minimumInputLength' => 3,
        'language' => [
            'errorLoading' => new JsExpression("function () { return 'No se pudieron cargar los resultados...'; }"),
            'inputTooShort' => new JsExpression("function () { return 'Por favor ingrese 3 o más caractéres'; }"),
            'searching' => new JsExpression("function () { return 'Buscando...'; }"),
        ],
        'ajax' => [
            'url' => $urlProv,
            'dataType' => 'json',
            'data' => new JsExpression('function(params) { return {q:params.term}; }'),
        ],
        'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
        'templateResult' => new JsExpression('function (name) { return name.text; }'),
        'templateSelection' => new JsExpression('function (name) { return name.text; }'),
    ],
]);
?>

Esta es la url del desarrollador del plugin: https://demos.krajee.com/widget-details/select2

Utilizo todas estas herramientas hace mucho, de esta manera obtengo al teclear 3 caracteres un listado de la base de datos mediante AJAX, el tema es que estoy queriendo depender lo menos posible de JQuery y darle más lugar a vanilla js, si bien el framework en sí y bootstrap 4 todavía utilizan JQuery quiero despegarme un poco. Lo que me cuesta es oir eventos de JQuery en vanilla js.

Espero haberme hecho entender, pido disculpas si suena enroscado.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 6
Ha aumentado 1 puesto en JQuery (en relación al último mes)
Gráfica de JQuery

Eventos.

Publicado por Andrés (3 intervenciones) el 23/03/2020 01:00:27
Sorry for the delay, I forgot to activate the notification email.

I was going through your code and doing a couple of tests. As we discussed earlier, capturing element events generated with jQuery using vanilla works flawlessly:

Add id to the select:
editDoom

Add listener using the console and test:
addListenerAndTest


Regarding the stackoverflow user, I don't know where the untouchable layer came from, but jQuery was built to be very compatible with both js vanilla and other frameworks. For me, there is little point in not being able to access the DOOM if the elements are generated by a frameworck, taking into account that they are still html tags.

Now, it is true that jQuery makes it easier to capture events about elements added to the DOOM dynamically after the document has been loaded, for example if the select or its options are dynamically added or changed using the ajax response, but that does not mean that it does not it can be done with js vanilla, it will only take a few more lines depending on how you are doing things.

PD: Excuse my English, I use a translator.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Nicolás Ignacio
Val: 7
Ha disminuido su posición en 2 puestos en JQuery (en relación al último mes)
Gráfica de JQuery

Eventos.

Publicado por Nicolás Ignacio (5 intervenciones) el 23/03/2020 01:32:59
Estimado Andres! Muhcas gracias por tomarte el tiempo de evaluar mi consulta. Te cuento que ese mismo código es el que hago en mi vista mediante el framework y no funciona....no se si será porque es una adaptación del select2 plugin por estos desarrolladores de kartik...pero no debería.

Y bueno quiza me puedes ayudar un poco mas a evaluar que puede estar sucediendo, ya que opino como vos que al ser js debería poder accederse.

Por último, no debes hablar en inglés porque hablo en español.

Aguardo tu respuesta, saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 6
Ha aumentado 1 puesto en JQuery (en relación al último mes)
Gráfica de JQuery

Eventos.

Publicado por Andrés (3 intervenciones) el 23/03/2020 17:29:59
"Por último, no debes hablar en inglés porque hablo en español."
Perdona de nuevo, participo en muchos foros en diferentes idiomas y se cruzan los cables.

En pruebas locales con el plugin personalizado igual me funciona. Tal vez puedes mostrar o adjuntar el proyecto o la parte del código relacionada con el problema para ejecutarlo y echarle un ojo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar