Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Check over/out methods gracefully. #52

Closed
AndersDJohnson opened this issue Dec 13, 2015 · 5 comments
Closed

Check over/out methods gracefully. #52

AndersDJohnson opened this issue Dec 13, 2015 · 5 comments

Comments

@AndersDJohnson
Copy link

If either out or over methods aren't provided or aren't functions, can we not throw exceptions?

@roydukkey
Copy link

Why would you want to throw exceptions? HoverIntent will work fine without declaring an out function. I might only understand throwing an exception when both over and out are omitted, but I think I'd much prefer to just see the plugin quietly continue. What are your concerns about the current behavior?

@AndersDJohnson
Copy link
Author

@roydukkey I said "can we not" as in, we are and shouldn't be - hence "gracefully" in title.
I'm seeing this exception when defining only an "over" method and not an "out" method in the options:

Uncaught TypeError: Cannot read property 'apply' of undefined
delay @ jquery.hoverIntent.js:82(anonymous function) @ jquery.hoverIntent.js:108

with version 1.8.1 from Bower.

We should probably check that it's defined before attempting to call it here:

return out.apply($el[0],[ev]);

Other similar bugs may exist, e.g.

return cfg.over.apply($el[0],[ev]);

@usmonster
Copy link
Collaborator

Hello @adjohnson916! I'm closing this as a duplicate of #42, which was fixed in #51 and will be available in the upcoming release (or on the master branch now, if you want a preview). Please let me know if I've misunderstood the issue here.

Thanks for reporting the issue and for using the plugin!

@AndersDJohnson
Copy link
Author

@usmonster Thanks. I'm not sure I want out to default to over, I'd prefer a no-op, but it's better at least. What about when over is undefined, but out isn't - then what's the actual vs. expected behaviors?

@usmonster
Copy link
Collaborator

@adjohnson916 An undefined out will default to over to remain consistent with jQuery's hover semantics. This was a correction to match the documented behavior and will likely not change, since one is expected to pass an explicit $.noop in your use case.

As for the behavior when there is an out without an over, again, according to the documentation, over is a required parameter for hoverIntent. There may be a case for defaulting over to $.noop when the plugin is invoked with an object, though this kind of invocation is often a mistake that might otherwise go unnoticed. As such, the plugin does not check for nor attempt to handle this case, so the current fail-fast behavior is both expected and desired.

It's true that this is the only place where it differs in jQuery .hover's behavior, but I believe this was a design choice considering this line in the docs:

Note, nothing prevents you from sending an empty function as the handlerIn or handlerOut functions.

Hope this answer your questions!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants