library internet ie9 funciona jquery internet-explorer

internet - jquery eliminar el atributo de opción "seleccionado"?



library jquery (7)

Bueno, pasé mucho tiempo sobre este tema. Para obtener una respuesta al trabajar con Chrome e IE, tuve que cambiar mi enfoque. La idea es evitar eliminar la opción seleccionada (porque no puede eliminarla correctamente con IE). => esto implica seleccionar la opción no agregando o estableciendo el atributo seleccionado en la opción, sino elegir una opción en el nivel "seleccionar" usando la propiedad selectedIndex.

Antes de :

$(''#myselect option:contains("value")'').attr(''selected'',''selected''); $(''#myselect option:contains("value")'').removeAttr(''selected''); => KO with IE

Después :

$(''#myselect'').prop(''selectedIndex'', $(''#myselect option:contains("value")'').index()); $(''#myselect'').prop(''selectedIndex'',''-1''); => OK with all browsers

Espero que ayude

¿Por qué esto no funciona en IE8 para anular la selección de todas las opciones en una selectbox multilínea?

$("#myselect").children().removeAttr("selected");

¿Hay alguna solución? Nada en lo que pueda pensar (attr ("seleccionado", "") etc.) parece funcionar.

ACTUALIZACIÓN: Aquí hay un jsFiddle actualizado. Al menos lo he degradado para que en IE8 se seleccione la primera opción. Pero sin el código fijo seleccionado = ''seleccionado'' y la llamada .attr que parece necesitar IE8, ¡hace 3 cosas diferentes en Firefox, Chrome e IE8! Vea esta versión: que es simple y parece que debería funcionar:

  • en Firefox: nada seleccionado
  • en Chrome: 0ª opción seleccionada
  • en IE8: primera opción seleccionada

Tal vez me he vuelto loco y hay un error en algún lugar que no puedo ver?


Es algo en la forma en que jQuery se traduce a IE8, no necesariamente el navegador en sí.

Pude solucionar el problema yendo a la vieja escuela y abandonando jQuery por una línea:

document.getElementById(''myselect'').selectedIndex = -1;


Esto funciona:

$("#myselect").find(''option'').removeAttr("selected");

o

$("#myselect").find(''option:selected'').removeAttr("selected");

jsFiddle


La pregunta se hace de una manera engañosa. "Eliminar el atributo selected " y "anular la selección de todas las opciones" son cosas completamente diferentes .

Para anular la selección de todas las opciones de una manera documentada y de navegador cruzado, utilice cualquiera

$("select").val([]);

o

// Note the use of .prop instead of .attr $("select option").prop("selected", false);


Otra alternativa:

$(''option:selected'', $(''#mySelectParent'')).removeAttr("selected");

Espero eso ayude


Similar a la respuesta de @ radiak, pero con jQuery (consulte este documento de API y comente cómo cambiar el selectedIndex ).

$(''#mySelectParent'').find("select").prop("selectedIndex",-1);

Los beneficios de este enfoque son:

  • Puedes quedarte dentro de jQuery
  • Puede limitar el alcance utilizando los selectores jQuery ( #mySelectParent en el ejemplo)
  • Código definido más explícitamente
  • Funciona en IE8, Chrome, FF

Usando jQuery 1.9 y superior:

$("#mySelect :selected").prop(''selected'', false);