Niedawno zaktualizowano jQuery v1.12 i okazało się, że ustawia ona elementy <select>
na nieistniejącą opcję, jeśli nie istnieje, zamiast z wdziękiem powracać do przywracania ustawień wartość jak poprzednio.jQuery v1.10 + val() tworzy pustą opcję, jeśli żadna nie istnieje
Oto zachowanie jestem przyzwyczajony do (pre v1.10):
$("button").click(function() {
$("select").val('');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<select>
<option value="1">something 1</option>
<option value="2" selected="selected">something 2</option>
</select>
<button>reset</button>
A oto jak v1.10 + zachowuje:
$("button").click(function() {
$("select").val('');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<select>
<option value="1">something 1</option>
<option value="2" selected="selected">something 2</option>
</select>
<button>reset</button>
Czy jest to błąd, czy jest to zamierzone zachowanie?
Przeczytałem przez changelog i nie widzę żadnej szczególnej wzmianki o tej zmianie, ale stwierdzam, że jest ona raczej destrukcyjna.
(Uwaga: Jestem nie poszukuje obejścia i jak zauważył w komentarzach, ja już zmieniłem aplikację do korzystania $('select').prop("selectedIndex", 0).change();
)
z ciekawości - dlaczego nie można ustawić opcji rozwijanej do nieistniejącego, jeśli chcesz je zresetować? – sinisake
Części mojej aplikacji mają kod taki jak '$ ('select'). Val ('');' który wcześniej resetował wybrane elementy w formularzu. Teraz się nie udało i zaktualizowałem go do '$ ('select') .project (" selectedIndex ", 0) .change();' który działa dobrze, ale nie spodziewałem się, że będę musiał przeszukać mój kod dla tego, kiedy Zaktualizowałem jQuery. – billynoah
@ sinisake - zaktualizowałem swoje pytanie - miałem tylko * "abc" *, aby pokazać, że zachowanie nie ogranicza się do ustawiania pustej wartości - z perspektywy czasu sprawia, że moje pytanie jest nieco niejasne. – billynoah