Dzień dobry.
Moim problemem jest to, że funkcja JS działa, ale nie we wszystkich przeglądarkach. Sytuacja i kod wygląda następująco:
Na stronie mam Słownik z hasłami i definicjami. Jest ich trochę, więc żeby łatwiej przejść do szukanego wyrażenia, na stronie mam <input>, który podpowiada słowa za pomocą <datalist>:
<form name="search">
<input id="searchWord" placeholder="Wpisz słowo, które szukasz" autocomplete="off" type="text">
<datalist id="list">
<option data-value="kotwica">Hasło ze słownika</option>
<option data-value="kotwica2">Hasło ze słownika2</option>
...
</datalist>
</form>
Po wpisaniu poprawnego słowa LUB wybraniu z listy odpowiedniego hasła, przeglądarka, na zasadzie kotwicy (adres.www#kotwica) powinna przenieść czytelnika do odpowiedniego miejsca w Słowniku. Operację przenoszenia wykonuję za pomocą następującego kodu:
function SearchWord()
{
var input = document.getElementById('searchWord'),
list = input.getAttribute('list'),
words = document.querySelectorAll('#' + list + ' option'),
inputValue = input.value;
for (var i = 0; i < words.length; i++)
{
var word = words[i];
if (word.innerText.toLowerCase() === inputValue.toLowerCase())
{
location.hash = "#" + word.getAttribute('data-value');
break;
}
}
}
Kod ten działa poprawnie w FF i IE (na Edge nie sprawdzałam), przy Operze i Chromie sytuacja jest taka sama: adres w pasku strony zmienia się poprawnie (czyli jest www.adres#kotwica), ale przeglądarce tak jakby nie chce się tego wykonywać. Kiedy debuguję kod w tych przeglądarkach i idę krok, za krokiem, wykonuje się poprawnie (czyli przejeżdża do wybranej kotwicy). Więc niby działa, wszystko jest ok, ale jak przychodzi co do czego, to wszystko robią, ale nie przenoszą widoku do odpowiedniego hasła.
Rozwiązania szukałam już w internecie, testowałam następujące podpowiedzi:
- zamiana "location.hash" na "location.href" oraz na "document.location.href";
- dodanie opóźnienia (500 milisekund), przed wykonaniem w/w instrukcji;
- dodanie przed w/w instrukcją instrukcji location.href = "";
Każdy z tych punktów z osobna, nie miksowałam ich. Niestety żaden nie pomógł. Czy jest to więc urok Chroma i Opery i nic się z tym nie da zrobić, a może jest inne rozwiązanie? Wolałabym nie rezygnować z <datalist> i nie używać jQuery (nigdzie indziej na stronie go nie używam), a nie będę przecież wymagać od użytkowników kombinowania z debuggerem...
Nadmienię jeszcze, że otwarcie nowej karty i wpisanie tam adresu z kotwicą, działa poprawnie zarówno w Chromie jak i w Operze, tak samo poprawnie działa kliknięcie na stronie linku z kotwicą. Nie działa tylko nadanie adresu z kotwicą za pomocą JS (a dokładniej - tylko przesuwanie, bo zmienne mają odpowiednie wartości, adres nadaje się poprawny). Konsola nie sypie żadnymi błędami.