Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как назначить событие при фокусе на все ссылки —сразу производить переход (по ссылке) (https://javascript.ru/forum/dom-window/42342-kak-naznachit-sobytie-pri-fokuse-na-vse-ssylki-%E2%80%94srazu-proizvodit-perekhod-po-ssylke.html)

developer 22.10.2013 20:17

Как назначить событие при фокусе на все ссылки —сразу производить переход (по ссылке)
 
Хочу всем ссылкам с атрибутом href (потомучто есть и якоря, да и onfocus к ним не применяется) в цикле назначить событие при получении фокуса — сразу перейти по этой ссылке. Пробовал вот так:
var myFocus = document.getElementsByTagName('a');
for(var y = 0; y <= myFocus.length; y++){
	if((myFocus.item(y)) && (myFocus.item(y).parentNode.nodeName == 'LI') && (myFocus.item(y).getAttribute('href'))){
		var hash2 = myFocus.item(y).getAttribute('href');
		myFocus.item(y).setAttribute('onfocus', "location.replace(" + location.host + location.pathname+")");
	}
}

и вот так:
...
if((myFocus.item(y)) && (myFocus.item(y).parentNode.nodeName == 'LI') && (myFocus.item(y).getAttribute('href'))){
		hash = myFocus.item(y).getAttribute('href');
		myFocus.item(y).onfocus = function(){
			myFocus.item(y).click();
		}
	}
...

Глупости, конечно, но все же:help:

ilyas-> 25.10.2013 07:47

Тоже с подобным столкнулся, каково же решение ?

Vlasenko Fedor 25.10.2013 13:35

Вот так можно
<!DOCTYPE HTML>
<html>
  
  <head></head>
  
  <body>
    <a href="http://mail.ru">Mail.ru</a>
    <a href="http://test.ru">Test.ru</a>
    <script>
      window.onload = function () {
        var links = document.getElementsByTagName('a');
        for (var i = 0, max = links.length; i < max; i++) {
          links[i].onmouseover = function () {
            this.href && (document.location.href = this.href);
          }
        }
      };
    </script>
  </body>

</html>

ruslan_mart 25.10.2013 21:03

window.onload = function() {
   var a = document.querySelectorAll('a[href]'), i;
   for(i=0; i<a.length; i++) a[i].onmouseover = function() {
      document.location = this.href;
   });
}

developer 27.10.2013 13:35

Спасибо за ответы, это нужно было для одного скрипта для шпаргалки. Скрипт сортирует абзацы и выводит их в отсортированном виде, при смене буквы выводит якорь на эту букву, а в начале страницы выводит весь алфавит для быстрой навигации по шпаргалке. Результат можно посмотреть здесь. Выкладываю исходники (может кому-то пригодится).

Дан например HTML:
<body>
...
<p>О.п.с.т.по с.с п. <strong>(Возможность трансформирования)</strong></p>
<p>В б.с.м.п.ч.с.т.д.э.у.50Гц. У.ч. <strong>(Неприемлемо, так как при этом становится заметным мигание ламп накаливания)</strong></p>
<p>П.ч.с.т.д.э.у.50Гц н. <strong>(т.к. за счет увеличения ЭДС самоиндукции ухудшается режим передачи энергии по проводам)</strong></p>
<p>О.е.м.п.в с.СИ <strong>(Вебер)</strong></p>
<p>П.м.п.со в.в.к. <strong>(&Psi; = &pi;Ф<sub>1</sub>)</strong></p>
...
</body>


Скрипт:
var find = function(array, value){
	for(var i=0; i < array.length; i++){
		if (array[i] === value) return i;
	}
	return -1;
}
function winWidth(){
	document.body.style.width = window.innerWidth;
}
window.onresize = winWidth;
//В момент полной загрузки страницы
window.onload = function(){
	//Назначение ширины окна = ширине экрана телефона
	document.body.style.width = screen.availWidth;
	//Сортировка по алфавиту
	var p = document.getElementsByTagName('p');
	var paragraphs = new Array();
	var alphabet = new Array();
	for(var i = 0; i <= p.length; i++){
		if((p[i]) && (p.item(i).hasChildNodes())){
			paragraphs.push(p[i].innerHTML);
			if((p.item(i).firstChild.nodeValue) && (find(alphabet, p.item(i).firstChild.nodeValue.substring(0, 1)) == -1))
				alphabet.push(p.item(i).firstChild.nodeValue.substring(0, 1));
		}
	}
	alphabet = alphabet.sort(); //Сортировка алфавита
	paragraphs = paragraphs.sort(); //Сортировка параграфов
	//Вывод алфавита
	var ul = document.createElement('ul');
	ul.className = 'alphabet';
	for(var x = 0; x <= alphabet.length; x++){
		if(alphabet[x] == undefined) continue;
		var li = document.createElement('li');
		var myLink = document.createElement('a');
		var href = '#w' + x;
		myLink.setAttribute('href', href);
		myLink.appendChild(document.createTextNode(alphabet[x]));
		li.appendChild(myLink);
		ul.appendChild(li);
	}
	document.body.insertBefore(ul, document.getElementsByTagName('p').item(0));
	//Иницилизация служебных переменных
	var firstSymbol = new String();
	var myAnchor = new String();
	var counter = new Number(0);
	//Создание элементов навигации
	var begin = document.createElement('a');
	begin.setAttribute('href', '#begin');
	begin.appendChild(document.createTextNode('в начало'));
	var end = document.createElement('a');
	end.setAttribute('href', '#end');
	end.appendChild(document.createTextNode('в конец'));
	var nav = document.createElement('div');
	nav.className = 'nav';
	nav.appendChild(begin);
	nav.appendChild(end);
	//Вставка навигации и сортировка
	for(var i in p){
		if((p[i]) && (paragraphs[i]) && (p.item(i).hasChildNodes()) && (p.item(i).firstChild.nodeType == 3)){
			if((paragraphs[i].toString().substring(0, 1) !== firstSymbol) && (counter < alphabet.length)){
				firstSymbol = paragraphs[i].toString().substring(0, 1);
				myAnchor = 'w' + counter;
				var word = document.createElement('a');
				word.setAttribute('name', myAnchor);
				word.appendChild(document.createTextNode(' = ' + firstSymbol + ' = '));
				nav.insertBefore(word, nav.childNodes.item(1));
				document.body.insertBefore(nav.cloneNode(true), p.item(i));
				nav.removeChild(nav.childNodes[1]);
				counter++;
			}
			p[i].innerHTML = paragraphs[i];
		}
	}
	//Добавление якорей
	var beginAnchor = document.createElement('a');
	beginAnchor.setAttribute('name', 'begin');
	var endAnchor = document.createElement('a');
	endAnchor.setAttribute('name', 'end');
	document.body.insertBefore(beginAnchor, document.body.firstChild);
	document.body.appendChild(endAnchor);
	//Назначение события при фокусе
	var myFocus = document.getElementsByTagName('a');
	for(var y = 0; y <= myFocus.length; y++){
		if((myFocus.item(y)) && (myFocus.item(y).parentNode.nodeName == 'LI') && (myFocus.item(y).getAttribute('href'))){
			var hash2 = myFocus.item(y).getAttribute('href');
			//myFocus.item(y).setAttribute('onfocus', "location.replace(" + location.host + location.pathname+")");
		}
	}
	//Переход по ссылке при получении фокуса
	var links = document.getElementsByTagName('a');
	for (var i = 0, max = links.length; i < max; i++){
		links[i].onfocus = function(){
			this.href && (document.location.href = this.href);
		}
	}
}


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