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");
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);