onchange and onkeyup together.

Hi,
I wrote a validation function,which makes for example 1234567  ---> 1,234,567

I use it in a textbox and I wanna also use onchange event for the same textbox. The function I wrote runs when unkeyUp activated.

However unkeyUp and onchange events doesn't work together?

Do u have any idea?
 
My function:
function Fcm2(thisis) {
    var tempstr,newstr,str,i,str2 ;
    var commapos,aftercomma,commacount;
    i=0;
    str = thisis.value;
        if (str.indexOf(".") < 0) {
        while ( 15 > i) { str = str.replace(",",""); i=i+1; }
    commacount=0;
    commapos=str.indexOf(";");

        if (commapos>=0) { aftercomma=str.substr(commapos); str=str.substr(0,commapos); }
        else aftercomma="";

        if (str.length > 3) {
           tempstr=str;
           newstr="";
           while (tempstr.length > 3)
           {  newstr=","+tempstr.substr(tempstr.length-3)+newstr;
              tempstr=tempstr.substr(0,tempstr.length-3);          }
        thisis.value = tempstr+newstr+aftercomma;
    }
        }
    return true;
}


---------------------
function calcul(thh){
alert("change");
}

function press(thisis){
if(window.event.keyCode < 47 && window.event.keyCode > 57) { window.event.keyCode = 9008999; }
if(window.event.keyCode == 9008999) {return false;  } else {Fcm(thisis) }
}

---------------------
<td width=80% height=20><input value="" class=numstd onchange="calcul(this)"  onkeyUp="press(this)" name=deneme size=40 maxlength=40></td>

edoyukAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

alambresCommented:
if you want to run calcul function just after press function you must call it in the onkeyup too. onchange event just triggers when you exit the field (if its value has changed, of course). there's no evaluation of value changes when pressing keys, just when exiting.

something like that:

function calcul(thh){
if (thh.value != thh.oldValue) alert("change");
thh.oldValue = thh.value;
}



<td width=80% height=20><input value="" class=numstd   onkeyUp="press(this);calcul(this);" name=deneme size=40 maxlength=40 oldValue=""></td>

hope it helps ya.

peace

alambres
0
edoyukAuthor Commented:
No alambres with this method it goes to database every time a key is pressed!!!
This is not that I want to.
0
alambresCommented:
what do you want then? I don't get your aim
0
Big Business Goals? Which KPIs Will Help You

The most successful MSPs rely on metrics – known as key performance indicators (KPIs) – for making informed decisions that help their businesses thrive, rather than just survive. This eBook provides an overview of the most important KPIs used by top MSPs.

edoyukAuthor Commented:
With onkeyup I want to use my validate function but onchange doesnt work when I use it.
0
alambresCommented:
this is then:
<HTML>
<HEAD>
<TITLE></TITLE>
<script type="text/javascript">
function Fcm(thisis)
{
    var tempstr,newstr,str,i,str2 ;
    var commapos,aftercomma,commacount;
    i=0;
    str = thisis.value;
        if (str.indexOf(".") < 0) {
        while ( 15 > i) { str = str.replace(",",""); i=i+1; }
    commacount=0;
    commapos=str.indexOf(";");

        if (commapos>=0) { aftercomma=str.substr(commapos); str=str.substr(0,commapos); }
        else aftercomma="";

        if (str.length > 3) {
           tempstr=str;
           newstr="";
           while (tempstr.length > 3)
           {  newstr=","+tempstr.substr(tempstr.length-3)+newstr;
              tempstr=tempstr.substr(0,tempstr.length-3);          }
        thisis.value = tempstr+newstr+aftercomma;
    }
        }
    return true;
}

function calcul(thh){
if (thh.value != thh.oldValue) alert("change");
thh.oldValue = thh.value;
}

function press(thisis){
if(window.event.keyCode < 47 && window.event.keyCode > 57) { window.event.keyCode = 9008999; }
if(window.event.keyCode == 9008999) {return false;  } else {Fcm(thisis) }
}



</script>

</HEAD>
<BODY>

<input value="" class=numstd onblur="calcul(this)"  onkeyUp="press(this)" name=deneme size=40 maxlength=40>

</BODY>
</HTML>
0
edoyukAuthor Commented:
Simply,
I want to use both validation and onchange event?

If you write 1234567 to the textbox it will make it 1,234,567 every time you write a number and then if you press tab button it will save it to the database?

Do you have a solution for that?

Thank you....
0
edoyukAuthor Commented:
alambres,
It is nor efficient to use onBlur because I wanna do some savings when data is changed in the textbox...
 
0
alambresCommented:
what do you understand by "data is changed"? I repeat: onchange event triggers when EXITING (=ONBLUR) the field. You should check if the value's changed when blur. Otherwise, you'll be doing the saving to DB every keyPress, which you said you don't want to. So?
0
edoyukAuthor Commented:
BUT how can I check easily(without global variables) if the value's changed when blur?
0
NetGrooveCommented:
You kill the onChange event by changing the field value by previous events.
So you have to check for changes on your own.

Like this:

<input type=text value="" onFocus="this.oldValue=this.value" onBlur="if(this.value!=this.oldValue)alert('changed')">

Good luck,
NetGroove


0
alambresCommented:
man, you didn't test my solution, did ya? Again: just need to add a custom attribute to the field (see that NetGroove is suggesting the same), you can name it as you wish , I name it oldValue. Here you store the value to do the comparison when checking the changes in the ONBLUR event. please, READ the suggestions and TEST it. Here's the code, again:

<HTML>
<HEAD>
<TITLE></TITLE>
<script type="text/javascript">
function Fcm(thisis)
{
    var tempstr,newstr,str,i,str2 ;
    var commapos,aftercomma,commacount;
    i=0;
    str = thisis.value;
        if (str.indexOf(".") < 0) {
        while ( 15 > i) { str = str.replace(",",""); i=i+1; }
    commacount=0;
    commapos=str.indexOf(";");

        if (commapos>=0) { aftercomma=str.substr(commapos); str=str.substr(0,commapos); }
        else aftercomma="";

        if (str.length > 3) {
           tempstr=str;
           newstr="";
           while (tempstr.length > 3)
           {  newstr=","+tempstr.substr(tempstr.length-3)+newstr;
              tempstr=tempstr.substr(0,tempstr.length-3);          }
        thisis.value = tempstr+newstr+aftercomma;
    }
        }
    return true;
}

function calcul(thh){
if (thh.value != thh.oldValue) alert("change");
thh.oldValue = thh.value;
}

function press(thisis){
if(window.event.keyCode < 47 && window.event.keyCode > 57) { window.event.keyCode = 9008999; }
if(window.event.keyCode == 9008999) {return false;  } else {Fcm(thisis) }
}



</script>

</HEAD>
<BODY>

<input value="" class=numstd onblur="calcul(this)"  onkeyUp="press(this)" name=deneme size=40 maxlength=40>

</BODY>
</HTML>
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
jaysolomonCommented:
No comment has been added lately, so it's time to clean up this TA.
I will leave the following recommendation for this question in the Cleanup topic area:

Accept: alambres {http:#9626560}

Please leave any comments here within the next four days.
PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!

jAy
EE Cleanup Volunteer
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
JavaScript

From novice to tech pro — start learning today.