joeldbirch / superfish

Superfish is a jQuery plugin that adds usability enhancements to existing multi-level drop-down menus.
Other
913 stars 314 forks source link

Some bug causes an annoying bug - one click of menu buttons does not work - requires multiple clicks #165

Open MonsterMMORPG opened 7 years ago

MonsterMMORPG commented 7 years ago

Using latest codes of everything

This bug started recently. I have been using superfish over 2 years now. It is probably some mechanical change in the way browsers work

Platform : Windows 8.1 x64 : tried with latest google chrome and internet explorer and i can reproduce. I have failed to reproduce the bug with firefox

Superfish : latest 1.7.9 here the code : http://www.monstermmorpg.com/Scripts/superfish.js Jquery : the one included in the latest version : http://www.monstermmorpg.com/Scripts/jquery-1.12.1.min.js Hoverintent : v 1.8.0 latest : http://www.monstermmorpg.com/Scripts/hoverintent.js

How do i init?

`(function ($) { //create closure so we can safely use $ as alias for jQuery

$(document).ready(function () {

    var exampleOptions = {
        speed: 'fast'
    }

    // initialise plugin
    var example = $('#mainMenuYes').superfish(exampleOptions);

    // buttons to demonstrate Superfish's public methods
    $('.destroy').on('click', function () {
        example.superfish('destroy');
    });

    $('.init').on('click', function (exampleOptions) {
        example.superfish();
    });

    $('.open').on('click', function () {
        example.children('li:first').superfish('show');
    });

    $('.close').on('click', function () {
        example.children('li:first').superfish('hide');
    });

});

})(jQuery);`

How to test and reproduce?

Here you can try without registering : http://www.monstermmorpg.com/

1: Open the main page 2: Click forum button 3: Click maps button : does not navigate 4: Click maps button again : navigates 5: Click forum button : navigates because it is single menu button doesnt have children 6: click maps button : does not navigate 7: click maps button : this time navigates again

Here a gif example

It didnt work 2 times

In the latest one you can clearly see it does not navigate when i click the maps button

animation

greenacorn-michael commented 6 years ago

I'm having the same issue. If I comment out everything in touchHandler it works fine with a mouse.

karl-dessol commented 5 years ago

I'm having the same issue. If I comment out everything in touchHandler it works fine with a mouse.

To add to this, it appears this is happening because of the following line: $this.one('click.superfish', false);

It looks like this line is attempting to disable the click functionality during the touch handler (i.e., during the animation itself). However for me it was also disabling the click functionality even on desktop.

FurkanGozukara commented 5 years ago

$this.one('click.superfish', false);

I have solved the problem with this way

can be checked on https://www.pokemonpets.com and https://www.monstermmorpg.com

            if ($ul.length > 0 && $ul.is(':hidden')) {

                    var check = false;
                    (function (a) { if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) check = true; })(navigator.userAgent || navigator.vendor || window.opera);

                    if (check == false) {
                        if (window.addEventListener) {
                            var once = false;
                            window.addEventListener('touchstart', function () {
                                if (!once) {
                                    check = true;
                                    console.log('touch screen');
                                    // Do what you need for touch-screens only
                                }
                            });
                        }
                    }

                    if (check == true)
                        $this.one('click.superfish', false);

                    if (e.type === 'MSPointerDown' || e.type === 'pointerdown') {
                        $this.trigger('focus');
                    } else {
                        console.log("li");
                        $.proxy(over, $this.parent('li'))();
                    }
                }