Autor Zpráva
moom
Profil
Dobrý den, mám prosím dotaz, Třeba se najde někdo šikovný, kdo bude
znát řešení. Mám na této stránce formulář na který se dostanu po odkliknutí
v menu na "Kontakt". Potřeboval bych, aby se kurzor po odkliknutí
přemístil do prvního pole formuláře.

Vytvořil jsem si podle návodu na webu javascript:

<script type="text/javascript">
function getfocus() { document.getElementById('myAnchor').focus(); }
</script>


V menu mám akci:

<ul>
      <li>O firmě</li>
      <li>Produkty</li>
      <li><a href="#kontakt" onclick="getfocus()" >Kontakt</a></li>
</ul>


a na prvním poli formuláře mám toto:
<input name="name" id="myAnchor" >


Bohužel mně to nějak blokuje JS, který používám pro animaci
na posouvání po stránce. Napsal mně ho jednou jeden kluk.
Pokud ho vypnu, tak to funguje jak má.

Nemáte prosím nějakou radu, jak to vyřešit????
Ukázka formuláře je zde.
Chamurappi
Profil
Reaguji na mooma:
Je to způsobeno tím, že skript toho jednoho kluka přepíše onclicky na odkazech vedoucích na kotvu. I kdyby použil nekolizní práci s událostmi, tak vykonání obou akcí naráz (čehož by mimochodem nejspíš šlo dosáhnout i <label>em, bez JS) patrně není tím, co potřebuješ, jelikož samo nastavení fokusu také odroluje stránku.

Potřebuješ zavolat tu funkci v době, kdy je dorolováno, tzn. dostrkat ji nějak do Kotvy.moveTo (ale tak, aby to neovlivnilo jiné kotvící odkazy).
moom
Profil
Super, děkuji za popostrčení. Pokusím se to nějak vygooglovat,
ale bohužel mně už ten člověk co napsal kotvy.js neodpovídá na emaily.
Možná mám na něj po tak dlouhé době špatný email.

Nemohu vás poprosit, že by jste to třeba napsal a já vám pošlu obratem
na účet třeba nějakou almužnu na pivko :) Já umím jenom CSS a HTML
a JS je pro mě Španělská vesnice.

Prosím, prosím, prosím :)
__construct
Profil
moom:
Najjednoduchšia je takáto úprava metódy click:
click: function()
{
    if(!this.destination) return true;
    var d = this.destination;
    Kotvy.intervalId = setInterval(function()
    {
        Kotvy.moveTo(d);
    }, Kotvy.interval)
    Kotvy.moveTo(d);
    d.id == 'kontakt' && getfocus();
    return false;
},
Alebo ak by si chcel aby sa označil input až po odscrollovaní, tak uprav metódu moveTo:
if(spo[0] == spn[0] && spo[1] == spn[1])
{
    clearInterval(Kotvy.intervalId);
    location.hash = destination.id;
    destination.id == 'kontakt' && getfocus();
}
V HTML kóde môžeš onclick udalosť zrušiť → ten objekt Kotvy ju aj tak prepíše.
Máš to grátis :-)
moom
Profil
Paráda, děkuji, děkuji, děkuji :)

A musím nechat akci:

<script type="text/javascript">
function getfocus()
{
document.getElementById('myAnchor').focus();
}

</script>
__construct
Profil
moom:
Je to zbytočne definovaná funkcia, ktorú nikde inde nevoláš, takže ju kľudne môžeš zrušiť a namiesto nej upraviť ten kód čo som Ti písal na:
… == 'kontakt' && document.getElementById('myAnchor').focus();
moom
Profil
Tak jsem to vyzkoušel a dělá mně to jednu chybku. Najednou se
neposouvá stránka po celé ploše, ale přesune se to dolů a pak se
doanimuje jenom kousek. Nová ukázka zde.

Tušíte prosím kde je chybka. Jenom jsem přidal první část kódu.

škoda, že si stihnu přečíst odpověď až za deset dni :(
moom
Profil
vyzkouším to na letišti. Děkuji za pomoc.
Musím běžet a ještě jednou děkuji. Vážím
si toho. Huahůůůů :)
__construct
Profil
moom:
Tak nakoniec to budeš musieť dať do do metódy moveTo (neprečítal som si Chamurappiho príspevok) – v tom prípade sa focus urobí až po skončení animácie.
Edit: Ešte som pozeral prečo sa Ti to neodscrolluje až na tú čiaru nad formulárom – je to preto, že tam máš 2× element s id="kontakt", takže sa to odscrolluje k tomu vrchnému. Premenuj ho a bude to OK.
moom
Profil
Paráda, děkuji za pomoc. Na letišti nejde FTP, tak posílám co jsem přidal:


var Kotvy = {
	interval: 30,
	multiplier: 6,
	init: function()
	{
		var a = document.getElementsByTagName("a");
		var url = location.href.substring(0, location.href.length - location.hash.length);
		for(var i = 0, l = a.length; i < l; i++)
		{
			if(a[i].href.substr(0, url.length) == url && a[i].href.indexOf("#") > -1)
			{
				a[i].destination = document.getElementById(a[i].hash.substr(1));
				a[i].onclick = Kotvy.click;
			}
		}
	},
	
	
	click: function()
{
    if(!this.destination) return true;
    var d = this.destination;
    Kotvy.intervalId = setInterval(function()
    {
        Kotvy.moveTo(d);
    }, Kotvy.interval)
    Kotvy.moveTo(d);
    d.id == 'kontakt' && document.getElementById('myAnchor').focus();
    return false;
},


	
	moveTo: function(destination)
	{
		var x = 0, y = -1;
		var o = destination;
		while(o)
		{
			x += o.offsetLeft;
			y += o.offsetTop;
			o = o.offsetParent;
		}
		var spo = Kotvy.scrollPosition();
		var dx = (x - spo[0]) / Kotvy.multiplier, dy = (y - spo[1]) / Kotvy.multiplier;
		if(dx > 0) dx = Math.ceil(dx); else dx = Math.floor(dx);
		if(dy > 0) dy = Math.ceil(dy); else dy = Math.floor(dy);
		scrollBy(dx, dy);
		var spn = Kotvy.scrollPosition();
		if(spo[0] == spn[0] && spo[1] == spn[1])
{
    clearInterval(Kotvy.intervalId);
    location.hash = destination.id;
    destination.id == 'kontakt' && document.getElementById('myAnchor').focus();
}
	},
	scrollPosition: function()
	{
		return [document.body.scrollLeft || document.documentElement.scrollLeft || window.pageXOffset || 0, document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset || 0];
	}
};



Zrušil jsem ten script v html a jednu duplikovanou kotvu.
Funguje to dobře, ale stejně to přeskočí kus stránky a doanimuje
se až poslední kus.

V html mám toto:



<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ukázka</title>
<link rel="stylesheet" href="css/reset.css" type="text/css" media="screen, projection" >
<link rel="stylesheet" href="css/960.css" type="text/css" media="screen, projection" >
<link rel="stylesheet" href="css/text-ukazka.css" type="text/css" media="screen, projection" >
<!--[if lte IE 6]>
<link rel="stylesheet" href="css/lte-ie6.css" type="text/css" media="screen, projection" />
<![endif]-->
<link rel="shortcut icon" href="img/favicon/favicon.ico" >
<script src="js/kotvy-new-2.js" type="text/javascript"></script>
</head>
<body id="top">
<div class="container_12">
<div class="grid_12" id="header">
<div class="mainmenu">
<ul>
<li>O firmě</li>
<li>Produkty</li>
<li><a href="#kontakt">Kontakt</a></li>
</ul>
</div>
<br class="cleaner" >
<!-- /mainmenu -->
</div>
<br class="clear">
<!-- /header -->

<div class="grid_12 cara-2" id="o-firme">&nbsp;</div>
<br class="clear">
<!-- /cara-1 -->

<div class="grid_3" >
<h2>Nadpis</h2>
<p>Lorem Ipsum je demonstrativní výplňový text používaný v tiskařském a knihařském průmyslu. Lorem Ipsum je považováno za standard v této oblasti už od začátku 16. století, kdy dnes neznámý tiskař vzal kusy textu a na jejich základě vytvořil speciální vzorovou knihu</p>
</div>
<div class="grid_3">
<h2>Nadpis</h2>
<p>Lorem Ipsum je demonstrativní výplňový text používaný v tiskařském a knihařském průmyslu. Lorem Ipsum je považováno za standard v této oblasti už od začátku 16. století, kdy dnes neznámý tiskař vzal kusy textu a na jejich základě vytvořil speciální vzorovou knihu</p>
</div>
<div class="grid_3">
<h2>Nadpis</h2>
<p>Lorem Ipsum je demonstrativní výplňový text používaný v tiskařském a knihařském průmyslu. Lorem Ipsum je považováno za standard v této oblasti už od začátku 16. století, kdy dnes neznámý tiskař vzal kusy textu a na jejich základě vytvořil speciální vzorovou knihu</p>
</div>
<div class="grid_3">
<h2>Nadpis</h2>
<p>Lorem Ipsum je demonstrativní výplňový text používaný v tiskařském a knihařském průmyslu. Lorem Ipsum je považováno za standard v této oblasti už od začátku 16. století, kdy dnes neznámý tiskař vzal kusy textu a na jejich základě vytvořil speciální vzorovou knihu</p>
</div>
<br class="clear">

<div class="grid_12 navigace"> <a href="#top" class="nahoru">Nahoru</a>
<div class="cara-1"></div>
<br class="clear">
</div>
<br class="clear">
<!-- /cara-1 -->

<div class="grid_3" >
<h2>Nadpis</h2>
<p>Lorem Ipsum je demonstrativní výplňový text používaný v tiskařském a knihařském průmyslu. Lorem Ipsum je považováno za standard v této oblasti už od začátku 16. století, kdy dnes neznámý tiskař vzal kusy textu a na jejich základě vytvořil speciální vzorovou knihu</p>
</div>
<div class="grid_3">
<h2>Nadpis</h2>
<p>Lorem Ipsum je demonstrativní výplňový text používaný v tiskařském a knihařském průmyslu. Lorem Ipsum je považováno za standard v této oblasti už od začátku 16. století, kdy dnes neznámý tiskař vzal kusy textu a na jejich základě vytvořil speciální vzorovou knihu</p>
</div>
<div class="grid_3">
<h2>Nadpis</h2>
<p>Lorem Ipsum je demonstrativní výplňový text používaný v tiskařském a knihařském průmyslu. Lorem Ipsum je považováno za standard v této oblasti už od začátku 16. století, kdy dnes neznámý tiskař vzal kusy textu a na jejich základě vytvořil speciální vzorovou knihu</p>
</div>
<div class="grid_3">
<h2>Nadpis</h2>
<p>Lorem Ipsum je demonstrativní výplňový text používaný v tiskařském a knihařském průmyslu. Lorem Ipsum je považováno za standard v této oblasti už od začátku 16. století, kdy dnes neznámý tiskař vzal kusy textu a na jejich základě vytvořil speciální vzorovou knihu</p>
</div>
<br class="clear">

<div class="grid_12 navigace"> <a href="#top" class="nahoru">Nahoru</a>
<div class="cara-1" id="kontakt"></div>
<br class="clear">
</div>
<br class="clear">
<!-- /cara-1 -->

<div class="grid_6">
<div class="grid_3 alpha">
<h2>Nadpis</h2>
<p>Lorem Ipsum je demonstrativní výplňový text používaný v tiskařském a knihařském průmyslu. Lorem Ipsum je považováno za standard v této oblasti už od začátku 16. století, kdy dnes neznámý tiskař vzal kusy textu a na jejich základě vytvořil speciální vzorovou knihu</p>
<ul class="seznam">
<li>Produkt</li>
<li>Produkt</li>
<li>Produkt</li>
</ul>
</div>
<!--/grid_3-->
<div class="grid_3 omega">
<h2>Kontaktní adresa</h2>
<address>
Něco. s r.o.<br>
Ulice 00, Praha 1<br>
Malá Strana 118 00
</address>
<address>
Telefon: 000 000 000<br>
GSM: 000 000 000<br>
FAX: 000 000 000<br>
<br>
<br>
</address>
<h2>Obchodní rejstřík</h2>
<p>Název firmy <br>
se sídlem blablabla <br>
Praha 6, 160 00 je zapsaná <br>
u obvodního soudu <br>
pro Prahu 1, oddíl C <br>
vložka 0000.</p>
</div>
<!--/grid_3-->

</div>
<div class="grid_6">
<h2>Kontaktní formulář</h2>
<p>Pokud Vás zajímají další podrobnosti, nebo máte jiné dotazy, kontaktujte nás prosím pomocí
tohoto formuláře.</p>
<fieldset>
<form action="poslat.php" method="post" name="myform">
<ul>
<li>
<label>Vaše jméno</label>
<input name="name" id="myAnchor" >
<br class="clear">
</li>
<li class="last">
__construct
Profil
moom:
Písal som, že to musí byť v metóde moveTo – takže z metódy click to odstráň (vymaž riadok č.29)
moom
Profil
Paráda, děkuji, děkuji, děkuji :) Skáču radostí jako blecha.
Mohl jsem to vyzkoušet až dnes a krásně to funguje.
Jsi kapacita. Dlužím pivko i s utopencem :)

Ještě jednou díky za pomoc.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0