Autor Zpráva
Sys
Profil *
cc, nevite nekdo jak udelat aby šlo na link (a href) udělat aby šel zmáčknout jen jednou za sekundu jinak by vracel false ?
SwimX
Profil
Sys:
javascriptu nefandím, ale funguje mi todle v rychlosti sesmolené.

<script>
var prvni = new Date();

function uz(){
    var ted = new Date();
    var vystup;
    
    if (prvni.getTime()+1000 > ted.getTime() ){
        vystup = false;
    }
    else{
        vystup = true;
    }
    prvni = new Date();

    return vystup;
}
</script>

<a href="#" onclick="return !uz();">klik</a>

ale někdo určitě poradí něco hezčího :)
Witiko
Profil
Možná jen pokud jde o co nejkratší zápis:

<script type="text/javascript">
const time = 1000;
var prvni = new Date();

function uz(){
    var ted = new Date();
    var vystup = prvni.getTime()+time<ted.getTime()?true:false;    
    prvni = new Date();
    return vystup;
}
</script>

<a href="javascript:;" onclick="return uz();">klik</a>
Chamurappi
Profil
Reaguji na Witika:
const time = 1000;
To má být jako konstanta?

prvni.getTime()+time<ted.getTime()?true:false
Výsledkem porovnání už je true nebo false, netřeba ternárního operátoru.
Witiko
Profil
Chamurappi:
To má být jako konstanta?

Ano, předpokládám, že čas se nebude měnit, tak ho definuji jako konstantu.
EDIT: Tak zjišťuji, že MSIE keyword const nepodporuje. V tom případě bude muset posloužit proměnná.

<script type="text/javascript">
var time = 1000;
var prvni = new Date();

function uz(){
    var ted = new Date();
    var vystup = prvni.getTime()+time<ted.getTime();    
    prvni = new Date();
    return vystup;
}
</script>

<a href="javascript:;" onclick="return uz();">klik</a>
Chamurappi
Profil
Reaguji na Witika:
Proč je prvni datum? Proč to není obyčejné číslo? Na „co nejkratší zápis“ je to pořád zbytečně ukecané a neefektivní. Mělo by stačit všehovšudy jen jedno volání metody getTime, víc práce s časem není potřeba.

Všechny dosud uvedené kódy znemožňují prokliknutí během první sekundy po načtení, což zadání nezmiňuje.

předpokládám, že čas se nebude měnit, tak ho definuji jako konstantu
Konstanty v JS neexistují, když nepočítáme proprietární rozšíření v některých prohlížečích.


Reaguji na Syse:
K čemu by vlastně ten skript měl sloužit? Ten odkaz je normální odkaz? Můžu si ho třeba i otevírat do nového okna?
Witiko
Profil
Chamurappi:
Všechny dosud uvedené kódy znemožňují prokliknutí během první sekundy po načtení, což zadání nezmiňuje.

Ano a stejně tak i prokliknutí během dané sekundy sekundový lockout obnovuje, což nejspíš nebyl záměr.

<script type="text/javascript">
var lockout = 1000;
var prvni = 0;

function uz() {
  var ted = new Date().getTime();
  if(prvni+lockout>ted) return false;
  else {
    prvni = ted;
    return true;
  }
}
</script>

<a href="javascript:;" onclick="return uz();">klik</a>


V případě, že to záměr byl a při každém kliknutí se má timer obnovit (čímž bude uživatel zcela neschopen se odkazem prokliknout), tak lze funkci zapsat na jednom řádku:

<script type="text/javascript">
var lockout = 1000;
var prvni = 0;

function uz() {
  return prvni+lockout<(prvni = new Date().getTime());
}
</script>

<a href="javascript:;" onclick="return uz();">klik</a>

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