toUpperCase

Aici postaţi orice este legat de tehnologiile "client side". HTML, HTML5, XHTML, CSS, CSS3, XML, Standarde
Manual JS: http://www.phpromania.net/jsmanual/index.html

Moderatori: eyecon, Moderatori

floorin
Senior Member
Mesaje: 247
Membru din: Joi Iun 29, 2006 6:03 pm

toUpperCase

Mesajde floorin » Mar Sep 19, 2006 8:53 am

cele 2 coduri functioneaza diferit, in sensul ca in primul caz s-ar parea ca onChange nu se mai activeaza?!

Cod: Selectaţi tot

<html>
 <head>
<SCRIPT LANGUAGE="JavaScript">
<!-- Hide script from some browsers
function toUpper(item)
{   str=item.value;
    item.value=str.toUpperCase();
}
// end script hiding from some browsers -->
</SCRIPT>
</head>
<body>
<form>
<input type=text OnChange="alert('onChange!')" onKeyUp="javascript:{toUpper(this);alert('onkeyup!');}">
<input type=text >
</form>
</body>
</html>


interesant este ca daca fac asa:

Cod: Selectaţi tot

<html>
 <head>
<SCRIPT LANGUAGE="JavaScript">
<!-- Hide script from some browsers
function toUpper(item)
{   str=item.value;
    item.value=str.toUpperCase();
}
// end script hiding from some browsers -->
</SCRIPT>
</head>
<body>
<form>
<input type=text OnChange="alert('onChange!')" onKeyUp="javascript:{this.value.toUpperCase();alert('onkeyup!');}">
<input type=text >
</form>
</body>
</html>

vad alerta pusa pe onChange. Cum se explica oare? :evil:



demonu
Average Member
Mesaje: 76
Membru din: Mie Apr 12, 2006 8:16 pm
Contact:

Mesajde demonu » Mar Sep 19, 2006 9:55 am

Se poate explica foarte simplu: In momentul in care tu apelezi toUpper aceasta primeste o copie a parametrului item (pass-by-value), pe care o modifica si astfel contextul extern functiei nu se modifica. Wikipedia zice ca javascript nu suporta pass-by-reference, asa ca mai bine ramai la a doua varianta.

floorin
Senior Member
Mesaje: 247
Membru din: Joi Iun 29, 2006 6:03 pm

Mesajde floorin » Mar Sep 19, 2006 10:52 am

nu inteleg raspunsul: spui ca functia primeste o copie a parametrului. Eu vad insa (testand) ca totusi se modifica continutul input'ului in amandoua cazurile, deci nu modifica o copie. Cred ca raspunsul este altul...sau nu te inteleg. Oricum, mersi, mi-ai dat o directie de studiu.

demonu
Average Member
Mesaje: 76
Membru din: Mie Apr 12, 2006 8:16 pm
Contact:

Mesajde demonu » Mar Sep 19, 2006 10:56 pm

Da...ummm cred ca nu am fost atent eu cand tziam dat raspunsul....am citit gresit ce ai scris....cred ca onChange nu se declanseaza din cauza ca in exemplul b ai value.toUpperCase - deci value care e de tip string nu se inlocuieste ...ci i se modifica continutul (de aceea onchange) , pe cand la exemplul a value este inlocuit cu un alt obiect de tip string (in momentul in care apelezi item.value = str.tiUpperCase(); )

Sper ca de data asta te-am "edificat" :D


Înapoi la “HTML/JavaScript/CSS”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 16 vizitatori