I have this code:
function beforemouseout() {
if ($(this).val() == '') {
$(this).val($(this).attr('title'));
}
else {
}
setTimeout('beforemouseout()',3000);
}
$(".other").click(function() {
$(this).val('');
$(".other").mouseout(beforemouseout);
});
<input id="hour" type="text" class="other" autocomplete="off" value="hour" title="hour" />
<input id="hour" type="text" class="other" autocomplete="off" value="minutes" title="minutes" />
But Firebug gives me an error: beforemouseout is not defined.
Why?
I tried it on jsfiddle.net and it doesn’t give an error , but the result is not what I expected.I expected when i click on #hour to hide the text and when onmouseout is triggered to wait 5 second and then – to do the checks
Change your setTimeout like this:
Otherwise it’s looking for
beforemouseoutin a global context, and if your code isn’t in there (it’s inside/scoped to another closure of any kind), it won’t find it. I’m guessing here that it’s in areadyhandler because you’re posting HTML right beside it, meaning you’re taking snippets.From an overall standpoint, never pass a string to
setTimeout()orsetInterval()if you can avoid it, it results in many unwanted side-effects…like this one. Instead, pass a direct reference like I have above, to be entirely explicit and well…make it work 🙂Edit (for question comments): it seems what you’re actually after it still a bit different than it’s written. From what I gather you want to delay before restoring the default value to the
<input>. There are several ways to do this, here’s one:You can give it a try here.