Autor Zpráva
user243
Profil
hoj,
původně jsem měl kód:
<input type="password" value="heslo" name="heslo" id="heslo" class="white_border" onfocus="this.value=''" onblur="if(this.value=='')this.value='heslo'" style="margin-right:8px;"> 
        <script>
  document.getElementById("heslo").focus();
</script>
a fungoval skvěle, ale formulářů mám na stránkách víc a pomalu každý input měl v sobě js, kde ve výsledku dával celek méně přehledný kód;
proto jsem si vytvořil následující funkci:
function form_eventy() {
var heslo = document.getElementById('heslo');
var nick = document.getElementById('nick2');
var email = document.getElementById('email');
var www = document.getElementById('www');
var komentar = document.getElementById('komentar');
var tag_b = document.getElementById('tag_b');
var tag_i = document.getElementById('tag_i');
var tag_u = document.getElementById('tag_u');
// můžu do jedné události zapsat i více funkcí, ale je to jen na bublání, viz záložky
/*heslo.addEventListener('focus', function(){
    if(heslo.value=='heslo') heslo.value='';
}, false);*/
 if (heslo) {
      heslo.focus();
      heslo.onfocus = function() { if(this.value=='heslo') this.value=''; };
      heslo.onblur = function() { if(this.value=='')this.value='heslo'; };
      };
if (nick) {  
nick.onfocus = function() { if(this.value=='Nick') this.value=''; };
nick.onblur = function() { if(this.value=='')this.value='Nick'; };
    };
if (email) {   
email.onfocus = function() { if(this.value=='E-mail') this.value=''; };
email.onblur = function() { if(this.value=='')this.value='E-mail'; };
        
www.onfocus = function() { if(this.value=='Www') this.value=''; };
www.onblur = function() { if(this.value=='')this.value='Www'; };
    };
if (komentar) {   
komentar.onfocus = function() { if(this.value=='Text.') this.value=''; };
komentar.onblur = function() { if(this.value=='')this.value='Text.'; };
    };
if (tag_b) {
tag_b.onmouseover = function() { helpline('b'); };
tag_b.onclick = function() { formatuj('b','komentar'); };

tag_i.onmouseover = function() { helpline('i'); };
tag_i.onclick = function() { formatuj('i','komentar'); };

tag_u.onmouseover = function() { helpline('u'); };
tag_u.onclick = function() { formatuj('u','komentar'); };
    };
}
asi není nejšťastnější, ale funguje ve ff, opeře, chrome i ie skoro dobře; problém je, že input dostane sice focus, ale jeho obsah (value) je pořád stejný, pokud ale překliknu na liště na jiný program a potom zpět na prohlížeč, input má stále focus a už bez hodnoty (v opeře hodnota zůstává);
jestli je to zbytečnost, tak se omlouvám, pokud najdete ve funkci nějakou botu, tak mi ji prosím taky nahlašte;
živá ukázka
předem díky za odpovědi
Keeehi
Profil
heslo.focus();
heslo.onfocus = function() { if(this.value=='heslo') this.value=''; };
Nejdřív mu nastavíš focus a pak teprve mu nastavuješ reakci na tu událost. Logicky by to mělo být přece obráceně. Nejsem si jistý, ale řekl bych, že problém bude právě v tom.
Chamurappi
Profil
Reaguji na usera243:
Proč testuješ u každého z <input>ů konkrétní hodnotu? Výchozí value je v defaultValue. Všechny onfocusy i onblury můžeš nastavit najednou jedním cyklem.
user243
Profil
díky Keeehi, problém byl tam;

když jsem to smolil, tak jsem neuměl správně pracovat s defaultValue (nevím proč, ale vzpomínám si, že jsem to testoval jen na defaultValue a ne na this.defaultValue), a proto jsem měl u všeho konkrétní hodnotu; díky Chamurappi za tip;
výsledná funkce:
function form_eventy() {
var heslo = document.getElementById('heslo');
var nick = document.getElementById('nick2');
var email = document.getElementById('email');
var www = document.getElementById('www');
var komentar = document.getElementById('komentar');
var tag_b = document.getElementById('tag_b');
var tag_i = document.getElementById('tag_i');
var tag_u = document.getElementById('tag_u');
// můžu do jedné události zapsat i více funkcí, ale je to jen na bublání, viz záložky

if (heslo) {
    heslo.onfocus = function() { if(this.value==this.defaultValue) this.value=''; };
    heslo.focus();
    heslo.onblur = function() { if(this.value=='')this.value=this.defaultValue; };
    };
if (nick) {  
    nick.onfocus = function() { if(this.value==this.defaultValue) this.value=''; };
    nick.onblur = function() { if(this.value=='')this.value=this.defaultValue; };
    };
if (email) {   
    email.onfocus = function() { if(this.value==this.defaultValue) this.value=''; };
    email.onblur = function() { if(this.value=='')this.value=this.defaultValue; };
        
    www.onfocus = function() { if(this.value==this.defaultValue) this.value=''; };
    www.onblur = function() { if(this.value=='')this.value=this.defaultValue; };
    };
if (komentar) {   
    komentar.onfocus = function() { if(this.value==this.defaultValue) this.value=''; };
    komentar.onblur = function() { if(this.value=='')this.value=this.defaultValue; };
    
    tag_b.onmouseover = function() { helpline('b'); };
    tag_b.onclick = function() { formatuj('b','komentar'); };

    tag_i.onmouseover = function() { helpline('i'); };
    tag_i.onclick = function() { formatuj('i','komentar'); };

    tag_u.onmouseover = function() { helpline('u'); };
    tag_u.onclick = function() { formatuj('u','komentar'); };
    };
}
Chamurappi
Profil
Reaguji na usera243:
Pole a cykly neumíš? Děláš tam pětkrát totéž…
user243
Profil
do teď jsem myslel, že celkem ano, ale nenapadá mě, jak to na tohle použít; kdyby jsi mě mohl trochu popostrčit...
user243
Profil
měl jsi na mysli něco takového?
var heslo = document.getElementById('heslo');
var nick = document.getElementById('nick2');
var email = document.getElementById('email');
var www = document.getElementById('www');
var komentar = document.getElementById('komentar');
var tag_b = document.getElementById('tag_b');
var tag_i = document.getElementById('tag_i');
var tag_u = document.getElementById('tag_u');
// můžu do jedné události zapsat i více funkcí, ale je to jen na bublání, viz záložky
var polozka = new Array(heslo, nick, email, komentar);
for (var i=0; i < polozka.length; i++) {
    if (polozka[i]) {
        polozka[i].onfocus = function() { if(this.value==this.defaultValue) this.value=''; };
        polozka[i].onblur = function() { if(this.value=='')this.value=this.defaultValue; };
        };
    if (polozka[i] == heslo) heslo.focus();
    else if (polozka[i] == komentar) {
        tag_b.onmouseover = function() { helpline('b'); };
        tag_b.onclick = function() { formatuj('b','komentar'); };

        tag_i.onmouseover = function() { helpline('i'); };
        tag_i.onclick = function() { formatuj('i','komentar'); };

        tag_u.onmouseover = function() { helpline('u'); };
        tag_u.onclick = function() { formatuj('u','komentar'); };
        };
    };

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: