Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Location.hash (https://javascript.ru/forum/dom-window/40208-location-hash.html)

salat-production 28.07.2013 00:48

Location.hash
 
Имеется простенький скриптец для модльных окон PrettyPhoto.

хэш который присваивается элементу не воспринимается в условии.

Стандартная функция:
function setHashtag(){
    if(typeof theRel == 'undefined') return;
    location.hash = theRel+'/'+rel_index+'/';
};


То что хочу видеть:
function setHashtag(){
    if(typeof theRel == 'undefined') return;
    location.hash = theRel+'='+rel_index;
};


Так вот суть в том, что по ссылке
Код:

http://mysite.ru/video/twd.php#id/1/
- при переходе открывает модальное окно
Код:

http://mysite.ru/video/twd.php#id=1
- при переходе ничего не происходит

Есть такая конструкция, которая грабит ссылку (не понимаю имеет ли она отношение к этому косяку):

if(!pp_alreadyInitialized && getHashtag())
    {
    pp_alreadyInitialized = true;

    hashIndex = getHashtag();
    hashRel = hashIndex;
    hashIndex = hashIndex.substring(hashIndex.indexOf('/')+1,hashIndex.length-1);
    hashRel = hashRel.substring(0,hashRel.indexOf('/'));

    setTimeout(function(){ 
    $("a["+pp_settings.hook+"^='"+hashRel+"']:eq("+hashIndex+")").trigger('click'); },50);
    }


Если кто не ленивый здесь полный скрипт: http://jsfiddle.net/yhtLz/
Параметр в 752 строке

Я уже все..в ауте. не понимаюв чем лаг.
Заранее огромное спасибо :yes:

T-sh 28.07.2013 00:52

очевидно, если вы что-то меняете в setHashtag(), нужно это же менять в getHashtag(). Покажите эту функцию.

salat-production 28.07.2013 00:55

function getHashtag(){
		var url = location.href;
		hashtag = (url.indexOf('#id') !== -1) ? decodeURI(url.substring(url.indexOf('#id')+1,url.length)) : false;

		return hashtag;
	};

T-sh 28.07.2013 01:08

в setHashtag()
location.hash = theRel+'='+rel_index+';';


так попробуйте.. или в getHashtag():
decodeURI(url.substring(url.indexOf('#id')+1,url.length+1))

salat-production 28.07.2013 01:15

неа, не хочет хватать :(

T-sh 28.07.2013 01:18

Цитата:

Сообщение от salat-production (Сообщение 264581)
неа, не хочет хватать :(

сохраните страницу на которой работаете и выложите архив сюда. в песочнице с таким куском кода нереально разбираться..

salat-production 28.07.2013 01:51

Вложений: 1
function setHashtag();

На 874 строке

T-sh 28.07.2013 03:18

856-857 стр:
hashIndex = hashIndex.substring(hashIndex.indexOf('=')+1,hashIndex.length);
hashRel = hashRel.substring(0,hashRel.indexOf('='));


869:
hashtag = (url.indexOf('#id') !== -1) ? decodeURI(url.substring(url.indexOf('#id')+1,url.length)) : false;


876:
location.hash = theRel + '=' + rel_index;

salat-production 28.07.2013 04:25

T-sh,
Большое спасибо.
Тоже самое делал, да не совсем.

salat-production 28.07.2013 04:52

А если уж такая малина пошла.
Как сюда правильно прикрутить replace("#","?")

T-sh 28.07.2013 12:37

Цитата:

Сообщение от salat-production (Сообщение 264605)
А если уж такая малина пошла.
Как сюда правильно прикрутить replace("#","?")

если заменить решетку на знак вопроса, это уже не хэш получится, а отдельная страница.. нельзя так делать. да и работать не будет, при каждом клике будет перезагружаться страница.

ruslan_mart 28.07.2013 13:56

Цитата:

Сообщение от T-sh
при каждом клике будет перезагружаться страница.

Если сделать через history.pushState, то не будет перезагружаться.

salat-production 28.07.2013 15:42

Цитата:

Сообщение от Ruslan_xDD (Сообщение 264665)
Если сделать через history.pushState, то не будет перезагружаться.

Я уже почитал об этом, как я понял что будет проблематично влепить это в такой скрипт.
Мол игра не стоит свеч.

T-sh 28.07.2013 15:54

Цитата:

Сообщение от Ruslan_xDD (Сообщение 264665)
Если сделать через history.pushState, то не будет перезагружаться.

Как я понял еще из первого вопроса поста, необходимо, чтобы модульные окна открывались и при переходе сразу по ссылке с хэшем: example.com/#id=1. Если заменить на знак вопроса: example.com/?id=1 — не важно, что будет наскриптовано, нужно будет менять серверную часть. А уже потом скрипт учить разбирать URL. В общем, велосипед на костылях получится.

хотя нет..ошибаюсь, можно сделать...

ruslan_mart 28.07.2013 16:14

history.pushState(0, 0, '?'+location.hash.substr(1));

salat-production 28.07.2013 23:00

Цитата:

Сообщение от Ruslan_xDD (Сообщение 264689)
history.pushState(0, 0, '?'+location.hash.substr(1));

Респект!
Вот только все таки
history.pushState(0, 0, location.hash.replace('#','?'));


Задача решена :thanks:


Часовой пояс GMT +3, время: 02:57.