2017-01-13 9 views
16

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

+0

z ciekawości - dlaczego nie można ustawić opcji rozwijanej do nieistniejącego, jeśli chcesz je zresetować? – sinisake

+0

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

+0

@ 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

Odpowiedz

9

jQuery automatycznie ustawiając ją na pierwszym lub domyślnej opcji był to błąd, który został ustalony po jQuery 1.10+

Zobacz ten link: https://bugs.jquery.com/ticket/13514

+3

więc pozwól mi uzyskać to proste, cała biblioteka jQuery została zmieniona, aby dostosować się do niespójnego zachowania IE9? Lol ... cóż, jeśli to nie jest najgłupsza rzecz, jaką słyszałem przez cały tydzień. Ale dzięki za link ... Wierzę, że odpowiada na moje pytanie. – billynoah

Powiązane problemy