2012-01-26 7 views
15

jQuery, próbuję zmienić wybraną opcję w SELECT elementu dopasować inną wartość wejściowego:Safari nie zaktualizuje renderowania SELECT przy zmianie opcji wybranej przez jQuery

$('#mySelect') 
    .find('option') 
     .filter(function() { 
      return this.text == $('#selectedRejectReason').val(); 
     }).attr('selected', true) 

Gdy strona renderuje i to JS działa, widzę to aktualizując DOM dobrze w internetowej inspektora Safari:

<select>  
    <option value="label">Select Reason</option> 
<option value="Wrong Amount" selected="true">Wrong Amount</option> 
<option value="Wrong Time">Wrong Time</option> 
<option value="Wrong Place">Wrong Place</option> 
</select> 

Po załadowaniu strony, domyślnie żadna z opcji ma wybranego atrybutu ... więc pierwszy element pokazuje. Po uruchomieniu jQuery DOM jest aktualizowany, więc wygląda tak, jak powyżej, ale w Safari nadal pokazuje "WYBIERZ POZIOM" na stronie. Działa to dobrze w Firefoksie.

Jakieś pomysły, dlaczego? Wygląda jak błąd Safari. Niestety, to łamie naszą stronę na iPhonie.

Poszukując niektórych osób, wydaje się, że poprawiono to przez uaktualnienie z jQuery 1.6 do 1.7. Niestety, nie mam w tej chwili luksusu. Ale jeśli to jest poprawka, ktoś wie, co zmieniło, że to naprawi?

+2

Należy użyć '.prop' zamiast' .attr' jeśli używasz jQuery w wersji 1.6 lub wyższej. –

+0

@Joseph, proszę, zrób odpowiedź, więc dam ci kredyt! Nie mam pojęcia, dlaczego to naprawia, ale tak. Patrząc na DOM, znacznik jest taki sam, ale z PROP przynajmniej aktualizuje obraz. –

Odpowiedz

30

Od jQuery 1.6, należy użyć .prop:

$('#mySelect') 
    .find('option') 
    .filter(function() { 
     return this.text == $('#selectedRejectReason').val(); 
    }) 
    .prop('selected', true); 

Spójrz na docs jQuery: http://api.jquery.com/prop/

+0

który to zrobił! Patrząc na dokumenty, wydaje się, że problem polegał na ustawianiu a pobieraniu (ustawienie 'prop'). –

+2

dziękuję, dziękuję, dziękuję! tylko żałuję, że znalazłem to godzinę temu ...:/ – jabram

+0

Znalazłem, że nie tylko musisz użyć .prop, nie możesz użyć wersji .attr przed nim. Próbowałem użyć obu do zaktualizowania DOM i znaczników, ale jeśli wersja .attr jest najważniejsza, rozwijanie nie jest aktualizowane w Safari, mimo że obie linie kończą się pomyślnie. .prop sam lub .prop następnie .attr działa. – xr280xr

Powiązane problemy