locate nie przekierowuje

0

Witam! Mam pod buttonem akcję zapamiętania danej w localStorage i chciałbym jeszcze dodatkowo przekierować na inną stronę, a więc w HTMLu odpowiedni element to:

<button id="guzik" type="submit" onclick="zrobWszystko()">wykonaj</button>

a w JS mam tak:

function zrobWszystko()
{
	zapamietajDane();
	przekierujStrone();
}	

function zapamietajDane()
{
	localStorage.clear(); //czyści zawartość localStorage; 
	
	//wczytuje zawartośc pół formularza i przypisuje je odpowiednim zmiennym
	var zmienna = document.getElementById('zmienna').value;
	localStorage.setItem("zmienna", zmienna); 
}


function przekierujStrone()
{
    window.location = "blabla.html";
}

Niestety nie rozumiem dlaczego window.location nie przekierowuje. Ktoś potrafi wyjaśnić ten fenomen? Przetestowałem pod Chrome i FFx

0

document.location.href="adres";

0

window.location to jedynie obiekt. Musisz jeszcze użyć metody href by przypisać aktualny adres.

window.location.href = 'http://www.google.com';

Tak w ogóle to przedrostek window nie jest wymagany.

PS czy to na pewno jest metoda to nie wiem, chyba raczej jakies magic quote (nie pisze w js) ;)

0
miej95 napisał(a):

window.location to jedynie obiekt. Musisz jeszcze użyć metody href by przypisać aktualny adres.

window.location.href = 'http://www.google.com';

Tak w ogóle to przedrostek window nie jest wymagany.

PS czy to na pewno jest metoda to nie wiem, chyba raczej jakies magic quote (nie pisze w js) ;)

href też nie działa (znaczy nie przekierowuje)

0
dzek69 napisał(a):

document.location.href="adres";

Też nie działa

0

Ja zawsze używam location.assign().
Ale u Ciebie chyba coś innego jest nie tak (jak wrzucę w konsolę nawet location = 'costam'; to też załadowuje stronę bez problemu).

0
sihox napisał(a):

Ja zawsze używam location.assign().
Ale u Ciebie chyba coś innego jest nie tak (jak wrzucę w konsolę nawet location = 'costam'; to też załadowuje stronę bez problemu).

no własnie w consoli jest ok, jak samo location="url" wypróbuję.

0

A nic się tam wcześniej nie sypie przypadkiem? W konsoli błędów czysto? Element o id='zmienna' istnieje? Sprawdź czy zadziała bez odpalania zapamietajDane().

0
sihox napisał(a):

A nic się tam wcześniej nie sypie przypadkiem? W konsoli błędów czysto? Element o id='zmienna' istnieje? Sprawdź czy zadziała bez odpalania zapamietajDane().

Działa, sprawdzałem. Najlepiej, że jak np po tym location dam alert to ten alert zadziała. Wiec juz nic nie rozumiem.

0

A może chcesz przejść na dokładnie tą samą stronę? Tzn. faktycznie nie zmienia się location.href.

0

na JSFiddle też działa poprawnie (http://jsfiddle.net/Gregorius/javm5zz2/) może to jakieś gówniane ustawienie przeglądarek?

0
sihox napisał(a):

A może chcesz przejść na dokładnie tą samą stronę? Tzn. faktycznie nie zmienia się location.href.

Nie, na inną.

0

To w zasadzie nie może nie działać ;)
Zobacz jeszcze czy zadziała jak uruchomisz z konsoli samo przekierujStrone().

Ja bym jeszcze na wszelki wypadek wywalił type="submit" z tego przycisku - i tak nie powinien mieć szans wysłać tego formularza.

0
sihox napisał(a):

To w zasadzie nie może nie działać ;)

No właśnie dlatego se włosy już wyrywam i dostaję qrwicy. Ale żeby nie działało na 2 różnych przeglądarkach ?

0
sihox napisał(a):

Zobacz jeszcze czy zadziała jak uruchomisz z konsoli samo przekierujStrone().

W zasadzie działa, tylko nie wiem dlaczego się pojawia alert: null

0

daj jak największy kawałek kodu, który nie działa, w formie spakowanej (zip), gotowy do rozpakowania i uruchomienia. przyczyna leży gdzieś głębiej i trzeba to lepiej przebadać

0
dzek69 napisał(a):

daj jak największy kawałek kodu, który nie działa, w formie spakowanej (zip), gotowy do rozpakowania i uruchomienia. przyczyna leży gdzieś głębiej i trzeba to lepiej przebadać

proszę: https://www.dropbox.com/s/jc7qgveltmjhaod/locateProblem_js.7z?dl=0

To wszystko jest dziwne, bo np. window.open('blabla.html') działa.

0

Działa normalnie. Na chrome i ff.
Jedyne co to czepia się do brakującego nawiasu w fs2.js: var z = JSON.parse(localstorage.getItem("zmienna");

0
sihox napisał(a):

Działa normalnie. Na chrome i ff.
Jedyne co to czepia się do brakującego nawiasu w fs2.js: var z = JSON.parse(localstorage.getItem("zmienna");

No to qrwa czemu u mnie ni na FF ani na chrome nie działa? jakieś ustawienie przeglądarki? na dwóch różnych kompach już sprawdzałem

0

boże...
button submituje Ci formularz.

funkcja javascript się wykonuje, następnie strona przechodzi na adres z action w form - tyle że u Ciebie tego atrybutu nie ma, więc przeglądarka przechodzi na bieżącą stronę. przekierowanie przez javascript w tym przypadku jest mniej ważne.

strona przekierowuje za to do fs2 w momencie jak pole input zostawisz puste - wtedy przeglądrka NIE przechodzi pod action ponieważ nieuzupełnione jest pole z required - więc wtedy zezwala na przekierowanie z javascriptu.

potrzebujesz anulować oryginalne zdarzenie submitowania forumularza (google: cancel form submit), albo w ogóle zrezygnuj z formularza (ale wtedy required Ci nie zadziała - możesz za to sprawdzać czy pole jest uzupełnione z javascriptu)

0

EEEhm, nie rozumiem.

0

Tzn o ile dobrze zrozumiałem ,to

 <button id="guzik" type="submit" onclick="zrobWszystko()" onsubmit="return false">

powinno wystarczyć ?

1

gotowiec dla leniwca:

<button id="guzik" type="submit" onclick="zrobWszystko(); return false;">

ale proszę - przysiądź do tego

0
dzek69 napisał(a):

gotowiec dla leniwca:

<button id="guzik" type="submit" onclick="zrobWszystko(); return false;">

ale proszę - przysiądź do tego

Dzięki. Jednak wracając do powodu: może byłbyś skłonny inaczej sformułować Twoje poprzednie objaśnienie, bardziej dla idioty, bo w moim wieku to percepcja już nie ta co kiedyś. Bo niby trochę wygooglałem ale to nie jest ciągle dla mnie do końca zrozumiałe. Nie dość, ze przekroczyłem magiczny wiek lat 40 to jeszcze jestem początkujący jeśli chodzi o programowanie (no dobra jakieś 30 lat temu pisałem prościutkie programy na ZX81 w basicu)

1

dzekowi chodzi o to ze, jak naciskacz buttonj o id="guzik" to przegladarka wysyla ten formularz(takie jestz adanie przycisku submit) pod adres zadeklarowany w atrybucie action w formularzu. poniewaz ty nie amsz tego zadekarowanego to domyslnie przegaldarka wysyl;a formualrz pod ten sam adres z ktorego zaladowany jest formularz(de facto odswieza strone). jedyne co musiales zrobic to poleceniem return false; dopisanym po wykonaniu twojej powiedziec do przegladarki zeby nie przetwarzal formularza i nie robila tego co robic powinna.

formularz domyslnie po submicie sie wysyla. ty chcesz wykonac jakas akcje zamiast wyslania formularza, wiec musisz domyslna akcje wysylania formularza zablookowac (wlasnie komenda return: false;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1