Autor Zpráva
Rob
Profil
Potřebuji, aby kliknutí na odkaz spustilo funkci, která mi něco spustí, co to teď není důležité. Pokud bude mít uživatel zaplé JavaScripty, tak to tu funkci provede a nespustí odkaz, ale když budou vyplé, tak to pošle odkaz. udělal jsem to takhle, ale to nefunguje:

<a href="nejaka_cesta.htm" onClick="nejaka_funkce();">Nějáký název</a>

a ve scriptu

function nejaka_funkce()
{
potřebný obsah funkce
return false;
}

Myslel jsem, že když budou scripty zaplé, tak to provede funkci a zablokuje odkaz, ale když budou vyplé, tak se ten odkaz nezablokuje protože se otom ani nedozví a spustí to stánku s náhradní variantou. Return false mi přišlo jako logiský nápad, protože se to tak dělá u formulářů, které se mají blokovat, např. když je mail ve špatném formátu, ale na odkaz to asi nepůjde. Jestli někoho něco napadne, tak dejte prosím vědět.
peta
Profil *
Rob
chybny zapis, vracis vysledek funkce false

function aaa(x)
{
if x>5 return true;
if x<7 return false;
if x&7<7 return false;
if (bbb(x)<7) return true;
return true;
}

var bbb=aaa(5,7);
if (bbb) neco proved
...to je totez.

spravne to musis dat do toho a href, aby jsi returnem ukoncil akci onclick v "a href" ne ukoncit funkci!
Cili funcuje to tak, ze kdyz se splni nejaka podminka ukonci se funkce s vysledkem a dalsi podminka uz nenastane.

potřebný obsah funkce
<a href="#" onclick="neco();return false;">
Anonymní
Profil *
není pro tenhle účel náhodou něco jako <noscript> ?
Chamurappi
Profil
<a href="nejaka_cesta.htm" onClick="return nejaka_funkce();">Nějaký název</a>
Fred
Profil
To je přesně ten způsob co nefunguje ve Firefoxu s Tabextensions jako třeba ne webylonu. Lepší je to úplně oddělit od zdrojáku. Používám třeba pro galerii
function extract(){
var navi=d.getElementById('jshelp');//nějaké id vymezující potřebnou oblast
var ahref=navi.getElementsByTagName('a');//použít na hrefy
for (var i=0;i<ahref.length;i++) {//použít na všechny hrefy ve vymezené oblasti
var jshref=ahref[i].getAttribute('href');//obsah hrefu
jshref=jshref.replace(new RegExp(".html","g"), ".jpg");
//tady zaměňuji html za jpg, když je vyplý js otvírá se ten href,
//když je zapnutý proběhne funkce která použije ten obrázek
ahref[i].setAttribute('rel',jshref);//uložím ten odkaz do neškodného attributu rel
ahref[i].onclick=function(){
var ktery=this.getAttribute('rel');//tady už to k něčemu použiji
kostra(ktery);
}
ahref[i].removeAttribute('href');//tady odstraním hrefy po jejich přeposlání do relu
ahref[i].setAttribute('href','#');//nastavím nové hrefy na #
}}
function addEvent(obj,evType,fn){if(obj.addEventListener){obj.addEventListener( evType,fn,true);return true;}else if(obj.attachEvent){var r=obj.attachEvent("on"+evType,fn);return r;}else{return false;}}
addEvent(window,'load',extract);
//addEvent:thx http://www.scottandrew.com/weblog/articles/cbs-events
//nakonec použiji addEvent funkci, která mi zaručí, že fce naběhne jen v prohlížeči, který je schopen ji zpracovat. Kdybych použil onload, tak to bude dělat problémy v IE4 nebo NN4, takto prostě fce v těchto vykopávkách nenaběhne a bude zobrazen obsah bez js.
Naštěstí se už začínají ve světě s tímto hodně probouzet DOM Scripting Task Force :-).
Chamurappi
Profil
Reaguji na Freda:
Mnou zmíněný postup je (nejen) z historického hlediska správný. Chyba je spíše na straně Tabextensions. Tvé řešení obchází dotyčný neduh jen tím, že otupí hodnotu atributu href. Omáčka kolem není (ani pro tvoji galerii) nezbytná: Odstraňovat atribut před tím není potřeba a přepravovat URL přes atribut rel je také zbytečně upovídané. Oddělování všeho od HTML kódu způsobem, jež jsi zmínil, není lepší právě proto, že tím zcela zbytečně vyřadíš toto vyřazení odkazu i ve starších prohlížečích.

Nyní jsem Tabextensions vyzkoušel a žádného problému jsem si nevšiml. Kvůli jedné podezřelé verzi jednoho rozšíření zřejmě nebudu upravovat kód Webylonu.

K DOM Scripting Task Force: WaSP se začíná ve světě probouzet. Velká škoda, že ne v tomto světě :-)
Rob
Profil
Vaše nápady jsem zatím netestoval, ale něco vypada, že bude fungovat, takže díky. Zatím mám varianu JavaScriptového menu a dole mám napsáno, že když odkazy nabudou fungovat ať kliknou na ZDE, kde je varianta menu pouze <a href... a css.
Fred
Profil
Chamurappi Pravda, chyba je ve starších TabExtensions v kombinaci s Firebirdem. Ta galerie je tady sinpps.cz/jana-masaryka.php (pardon nechci aktivní link), proto tolik těch zbytečností, neměl jsem moc čas to zkracovat, šlo jen o možné řešení a jeho princip.
Anonymní
Profil *
<SCRIPT LANGUAGE="JavaScript">
<!--
document.write("<a href=\"nejaka_cesta.htm\" onClick=\"nejaka_funkce();\">Nějáký název</a>")
// -->
</SCRIPT>

<NOSCRIPT>
<a href="nejaka_cesta.htm">Nějáký název</a>
</NOSCRIPT>
Rob
Profil
Může mi někdo potvrdit jak moc se dá na <noscript> spolehnout. Myslím ohledně stáří prohlížěčů a typu (IE, mozila, atd.).
Chamurappi
Profil
Reaguji na Anonymního:
Tvůj kód neřeší Robův dotaz.

Reaguji na Roba:
Jediný mně známý prohlížeč, který zná element <script> a nezná <noscript> (zobrazuje vždy jeho obsah), je Netscape 2. Pochybuji, že se tento devět let starý kousek ještě vyskytuje mezi normálními uživateli. Na <noscript> se tudíž spolehnout dá.
Rob
Profil
Chamurappi
To se dnes asi už neuvidí. Takže moc dík.
Rob
Rob
Profil
A ještě jedna věc. Abych mohl vyladit, jak si představuji tu variantu bez JS, tak bych je potřeboval vypnout a hlavně (!!!!!!) zase zapnout JS na svém počítači. Ví někdo jak na to v IE6?? Hledal jsem to, ale nezadařilo se.
Leo
Profil
"Ví někdo jak na to v IE6?? Hledal jsem to, ale nezadařilo se."

Idealni varianta je nainstalovat si webserver, treba Apache. Leo
Rob
Profil
Leo
OK, šlo by to malinko rozvést, kde ho stáhnou atd.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0