Para la versión select2> = 4.0.0
Es posible que las otras soluciones no funcionen, sin embargo, los siguientes ejemplos deberían funcionar.
Solución 1: hace que se activen todos los eventos de cambio adjuntos, incluido select2
$('select').val('1').trigger('change');
Solución 2: hace que el evento de cambio SOLO select2 se active
$('select').val('1').trigger('change.select2');
Ver este jsfiddle para ejemplos de estos. Gracias a @minlare por la Solución 2.
Explicación:
Digamos que tengo un mejor amigo seleccionado con los nombres de las personas. Entonces, Bob, Bill y John (en este ejemplo, supongo que el valor es el mismo que el nombre). Primero inicializo select2 en mi select:
$('#my-best-friend').select2();
Ahora selecciono manualmente Bob en el navegador. Luego Bob hace algo malo y ya no me gusta. Entonces el sistema anula la selección de Bob para mí:
$('#my-best-friend').val('').trigger('change');
O digamos que hago que el sistema seleccione el siguiente en la lista en lugar de Bob:
// I have assume you can write code to select the next guy in the list
$('#my-best-friend').val('Bill').trigger('change');
Notas sobre el sitio web Select 2 (ver Métodos obsoletos y eliminados ) que pueden ser útiles para otros:
.select2 ('val')
El método "val" ha quedado en desuso y se eliminará en Select2 4.1. El método en desuso ya no incluye el parámetro triggerChange.
En su lugar, debe llamar directamente a .val en el elemento subyacente. Si necesita el segundo parámetro (triggerChange), también debe llamar a .trigger ("change") en el elemento.
$('select').val('1').trigger('change'); // instead of $('select').select2('val', '1');