[thelist] [JavaScript] way around these global vars?
marcus
m-lists at bristav.se
Sun Feb 12 16:30:50 CST 2006
Little late into the discussion...
If you just want to get rid of the global vars you could just replace
your setTimeout with:
setTimeout(function() { showHit(btn); }, 500);
Then you can remove some of the code I think (not just the global vars)
Result:
function showHit(btn)
{
var urlArray = btn.style.backgroundImage.split("/");
var img = urlArray[urlArray.length -1].replace(".gif)", "");
var on = "url(/images/" + img + "_on" + ".gif)";
btn.style.backgroundImage = on;
setTimeout(function() { showHit(btn); }, 500);
}
Not tested though. I think this is simpler than the OO solution proposed
to keep the state internal (where you end up with a if-else that's not
needed)
/Marcus
Tom Dell'Aringa skrev:
> Hi folks,
>
> Still working on my kiosk project and I'm wanting to make hit states for my buttons. The buttons
> look like this:
>
> <input type="submit" name="viewall" style="border: 0; background: #fff; background-image:
> url(/images/btn-viewall.gif); width: 300px; height: 75px;" value="" onclick="showHit(this);">
>
> Yeah, it's ugly and the local style blows, but that's the way it has to be for right now. In any
> event, I've written this little showHit() function attached to the onclick to give the user a
> little feedback that yeah, you did hit the button and it did register. It sends itself as the only
> argument. See below:
> --------------------------------------------------------------------------
> var lastImg;
> var currentBtn;
> function showHit(btn)
> {
> if(!btn)
> {
> currentBtn.style.backgroundImage = "url(/images/" +lastImg+ ".gif)";
> return;
> }
> else
> {
> var urlArray = btn.style.backgroundImage.split("/");
> var img = urlArray[urlArray.length -1].replace(".gif)", "");
> var on = "url(/images/" + img + "_on" + ".gif)";
> lastImg = img;
> currentBtn = btn;
> btn.style.backgroundImage = on;
> setTimeout("showHit()", 500)
> }
> }
> ----------------------------------------------------------------------
> So it tears the background string apart, grabs the image name, adds '_on' for the onstate, then
> calls itself a half second later and puts the old image back. It works fine, but I don't like the
> global vars and I'm wondering how I can get around using them.
>
> When I tried to send the button object/img name via setTimeout() recursively, they are out of
> scope, so that does not work.
>
> Any ideas? Feel like I might be missing something obvious.
>
> Thanks
>
> Tom
>
> http://www.pixelmech.com/
> http://www.crossandthrone.com/
>
>
> Professor Rumford: 'But I still don't understand about hyperspace.'
> The Doctor: 'Well, who does?'
> K9: 'I do.'
> Doctor: 'Shut up, K9!'
>
>
More information about the thelist
mailing list