6

Can I pass a variable in hover()?

As in the script below, I don't want to declare the same variable twice var target = xxx and I don't want to make this variable a global target = xxx bcos I have other function using this variable name - target.

   $('.image-profile').hover(function () {

        var target = $('.button-change-image-profile',this);
        target.show();

    },function () {

        //var target = $('.button-change-image-profile',this);
        target.hide();

    });

So I tried to pass the var like this },function (target) {, of course it is wrong, but any other method to pass this var?

thanks.

1
  • what is the use of passing argument to events type of function , what ever you want will be availabe through events or this... Commented Nov 26, 2010 at 17:19

4 Answers 4

7

The short version is just to toggle here:

$('.image-profile').hover(function () {
    $('.button-change-image-profile',this).toggle();
});

To have it available in each handler (as a more general solution) define it outside when looping (using .each() for example), like this:

$('.image-profile').each(function() {
    var target = $('.button-change-image-profile',this);
    $(this).hover(function () {
        target.show();
    },function () {
        target.hide();
    });
});
Sign up to request clarification or add additional context in comments.

1 Comment

thanks so much! why didn't I think of that!?? thanks for the help :-)
7

Another possible approach: to save data into the this of the hover in/out using jQuery .data(). You save it on mouse in, you retrieve it on mouse out. This may be conceptually similar to use a global var or a var out of hover function, thus, t may create some garbage...

$('.image-profile').hover(function () {

  var target = $('.button-change-image-profile',this);
  target.show();

  // we save the target object into the 'target' key.
  $(this).data('target',target);  

},function () {

  // we retrieve the target object (a jQuery object) and then hide it.
  $(this).data('target').hide();

});

Hopefully, this approach isn't too wrong...

1 Comment

Worked for me either :)
2

I think jQuery bind might be what you want.

Comments

1

Just define var out of hover function.

3 Comments

in javaScript every variable defined out of function is some kind of global.
This is a very bad way to "solve" the problem, and in fact would cause issues here, since there are likely many .image-profile elements.
If you mean that any variable that is not inside a function is global, then you'd be right. If you mean that defining the variable outside the hover handlers will make it global, then that would depend on where this code is located. If it is in another function body, then the variable wouldn't be global.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.