Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   замена линков при клике (https://javascript.ru/forum/events/58368-zamena-linkov-pri-klike.html)

zerofx 17.09.2015 23:04

замена линков при клике
 
привет всем - поставили мне одну задачу ...

есть две ссылки- первая уже прописана в href и открывается в новом окну при клике (это работает), и после клика и после открытия в новом окне - в href должна поместиться вторая ссылка - и так столько сколько раз кликните на ссылку

я кажется понимаю как оно должно работать ... логику, но на практике не могу его заставить заработать ....

в общем - результатов + ошибок - нет ...

помогите разобраться

https://jsfiddle.net/rao1qptx/



<a target="_blank" class="link" href="http://www.ya.ru">LINK</a>


$(document).ready(function() {
    $('.link').click(function() {
        var first_url = 'http://www.ask.com'; // ссылка на аск
        var second_url = 'http://www.ya.ru'; // ссылка на яндекс
        var true_url = $(this).attr('href'); //помещаю ссылку которая есть на данный момент в href

        link_sort(); // инициалізирую функцию

        function link_sort() {
            if (true_url == first_url) { //сравниваю силки
                $(this).attr('href', second_url) // если не совпадают то ставим это в хреф
            } else {
                $(this).attr('href', first_url) // если не совпадают то ставим это в хреф
            };
        }

    });

Lemme 17.09.2015 23:19

смысл ясен?
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<a target="_blank" class="link" href="http://www.ya.ru">LINK</a>
	<script>
		var links = ['http://ya.ru', 'http://javascript.ru','http://google.com','http://github.com'];
		document.querySelector('.link').onclick = function() {
			if (links.length > 0) {
				this.href = links.shift();
			}
		}
	</script>
</body>
</html>

zerofx 18.09.2015 00:12

так себе +-


var links = ['http://ya.ru', 'http://javascript.ru','http://google.com','http://github.com'];
- создаем массив

if (links.length > 0) {
                this.href = links.shift();
            }
- вот здесь не очень понимаю

+ должно быть бесконечный перебор ссылок, а в Вашем примере он на github заканчивается

newtimebigtime 18.09.2015 00:34

zerofx,
что то вроде
index=-1// глобальная
if(index>links.length) index=-1; this.href=links[index++]

Lemme 18.09.2015 00:40

// массив ссылок.
var links = [
    'http://ya.ru',
    'http://javascript.ru',
    'http://google.com',
    'http://github.com'
];

document.querySelector('.link').onclick = function() {
    // получаем позицию ссылки из аттрибута data-linkpos и приводим к типу number
    var linkPos = +this.getAttribute('data-linkpos');
    
    // если это последняя ссылка в массиве, то сбрасываем позицию.
	if (linkPos >= links.length) {
    	linkPos = 0;
    }
    // меняем ссылку
    this.href = links[linkPos];
    // увеличиваем значение data-linkspos на linkPos + 1
    this.setAttribute('data-linkpos', linkPos + 1);
}

newtimebigtime 18.09.2015 00:56

Цитата:

Сообщение от Lemme
// массив ссылок.

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

Lemme 18.09.2015 01:04

newtimebigtime, да, я чет во втором примере затупил. =)
поправил.

zerofx 18.09.2015 09:30

Lemme - да разобрался, СПС!!!

и мне все равно интересно - уже просто хочу понять - мой вариант - имеет право на жизнь? Если так - то где там ошибка? почему он не работает

Lemme 18.09.2015 10:06

Цитата:

почему он не работает
в функции link_sort $(this) === window, уберите функцию и поймете.
Цитата:

мой вариант - имеет право на жизнь
если вам нравится на каждую ссылку писать условие, то да, имеет.

zerofx 18.09.2015 10:44

Цитата:

Сообщение от Lemme (Сообщение 389123)
в функции link_sort $(this) === window, уберите функцию и поймете.

если вам нравится на каждую ссылку писать условие, то да, имеет.



а тут я Вас вообще не понял ...

для меня Важно зромуты где здесь ошибка ... а не какой вариант лучше ...

да Ваш вариант круче ... я не спорю - но все же мне интересно заставить свой вариант работать =)


объясните что вы имеете в виду - link_sort $(this) === window

Lemme 18.09.2015 10:55

Сейчас я сделал, тоже самое что и вы. Теперь посмотрите на что ссылается this, т.е сначала на кнопку, а внутри функции myFunction - уже на объект window.

Если действительно интересно, то http://learn.javascript.ru/object-methods

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<button>Click</button>

	<script>
		document.querySelector('button').onclick = function() {
			// this ссылается на кнопку
			alert(this);

			myFunction();

			function myFunction() {
				// this ссылается на window
				alert(this);
			}
		}
	</script>
</body>
</html>


Насчет лучше/хуже - я лишь ответил на ваш вопрос.


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