Tutoriales de Informática y Dispositivos Móviles
Tutoriales de Informática y Dispositivos Móviles
Remove change event image

Eliminar evento onChange de un select con JQuery

Eliminar evento onChange de un select con JQuery

En el siguiente tutorial aprenderemos cómo eliminar un evento de change de un elemento select sin afectar al evento predeterminado del elemento.

Evento change de elementos select

Los elementos select tienen definidos por defecto una serie de eventos propios para que realicen una serie de acciones predeterminadas. Por ejemplo al pulsar espacio se despliega, al pulsar enter se selecciona, etc.

Si añadimos un evento change a un select, podremos personalizar el comportamiento en el momento en el que se selecciona una opción.

Veamos un ejemplo

<!-- Elemento select -->
<select class="select-elem"></select>
<script>
    // Añadimos un evento change al elemento
    // para que cuando se cambie la opción seleccionada ejecute un console.log
    $(".select-elem").change(function(){
        console.log("El select ha cambiado");
    });
</script>

Como ya hemos visto, podemos añadir un evento change a un select para personalizar qué queremos que haga cuando el elemento cambie.

Eliminar eventos con unbind

Para eliminar eventos de un elemento podemos hacerlo utilizando el método unbind, pero hay que tener cuidado cuando el unbind lo hacemos sobre un elemento select.

Normalmente, el método unbind lo usamos para eliminar un evento y que éste no se repita.

Veamos un ejemplo de repetición de evento con un select

<!-- Elemento select -->
<select class="select-elem"></select>
<script>
    // Método que añade el evento
    function addEventSelectElem(){
        $(".select-elem").change(function(){
            console.log("El select ha cambiado");
        });
    }
    // Si llamamos varias veces al método addEventSelectElem el evento se duplica
    addEventSelectElem();
    addEventSelectElem();
    // Y lo que sucede en este caso es que el console.log
    // se repetirá tantas veces como hemos llamado al método
    // en el momento que el select cambie.
</script>

El problema con los elementos select es que si utilizamos el método unbind directamente, se perderá la funcionalidad predeterminada del select.

Ejemplo de unbind sobre un elemento select

<!-- Elemento select -->
<select class="select-elem"></select>
<script>
    // Método que añade el evento
    function addEventSelectElem(){
        // Eliminamos el evento antes de generarlo
        $("select-elem").unbind("change");
        $(".select-elem").change(function(){
            console.log("El select ha cambiado");
        });
    }
    // Si llamamos varias veces al método addEventSelectElem ya no se duplicará
    addEventSelectElem();
    addEventSelectElem();
    // Pero habremos perdido la funcionalidad predeterminada del Elemento
    // Esto puede causar que no funcione correctamente
</script>

Eliminar función de un evento con unbind

Para solucionar este problema que planteamos, lo ideal es utilizar una función dentro del código del evento change y hacer unbind sobre dicha función y no sobre el propio evento.

Veamos un ejemplo

<!-- Elemento select -->
<select class="select-elem"></select>
<script>
    // Método que añade el evento
    function addEventSelectElem(){
        // El unbind lo hacemos sobre el método changeSelectElem del evento change
        $("select-elem").unbind("change", changeSelectElem);
        $(".select-elem").change(function(){
            changeSelectElem();
        });
    }
    function changeSelectElem(){
        console.log("El select ha cambiado");
    }
    // Si llamamos varias veces al método addEventSelectElem ya no se duplicará
    addEventSelectElem();
    addEventSelectElem();
    // Y tampoco se perderá la funcionalidad predeterminada del elemento select
</script>

Más tutoriales de jQuery

Si te ha gustado no olvides compartir en redes sociales.

[addthis tool=»addthis_inline_share_toolbox_6jt6″]

Espero que te haya servido. Cualquier duda deja un comentario. Un saludo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Translate »
A %d blogueros les gusta esto: