jq.appframework.js verbuggt?



  • Das wrappt die Callback-Funktion in eine Closure

    //Shim to put touch events on the jQuery special event
        var oldAdd=$.event.add;
    
        $.event.add=function(){
            var oldHandler=arguments[2];
            var self=this;
            var handler=function(){
                var oldArgs=arguments;
                if(oldArgs[0].originalEvent&&oldArgs[0].originalEvent.touches){
                    oldArgs[0].touches=oldArgs[0].originalEvent.touches;
                    oldArgs[0].changedTouches=oldArgs[0].originalEvent.changedTouches;
                    oldArgs[0].targetTouches=oldArgs[0].originalEvent.targetTouches;
                }
                oldHandler.apply(self,oldArgs);
            };
            arguments[2]=handler;
            oldAdd.apply($, arguments);
        };
    

    jQuery setzt da aber eine guid

    if ( !handler.guid ) {
    			handler.guid = jQuery.guid++;
    		}
    

    und ohne die guid findet es dann die Callback-Funktion im .unbind nich.

    Oder bin ich der einzige, bei dem die $().unbind nicht funktioniert 😞



  • es geht auch nicht, wenn der handler aus dem events array gelöscht wird. Keine Ahnung wo der gefeuert wird...

    oldAdd.apply($, arguments);
    		if(handler.guid){
    			oldHandler.guid = handler.guid;
    		}
        };
    


  • Hat keiner einen github account und kann das mal anfragen? 😞


  • Mod

    Zeig mal minimalistischen Code der den Fehler reproduziert.
    Mir ist jetzt auf die schnelle kein unbind Bug bekannt, aber generell ist unbind etwas dass eher selten gemacht wird, also nicht unmöglich dass es da Fehler gibt (dennoch eher unwahrscheinlich).



  • http://pastebin.com/EiELy8zC
    dann mit chrome Version 37.0.2062.120 m url#main



  • das Forum ist auch verbuggt. Ich konnte das Spam-Formular nicht mit dem Code in Code Tags abschicken...



  • Sry, wollte nicht pampig sein. Brauch dafür nur mittelfristig eine Lösung. Kann zumindest einer den Fehler reproduzieren? 😞


  • Mod

    Jep, du hast vollkommen Recht.
    Ist ein Fehler in jq.appframework.js

    mein provisorischer fix wäre

    //Shim to put touch events on the jQuery special event
        var oldAdd=$.event.add;
    
        $.event.add=function(){
            var oldHandler=arguments[2];
            var self=this;
            var handler=null;
            if(oldHandler && oldHandler.__newWrapperFunction) {
                handler=oldHandler.__newWrapperFunction;
            } else {
                handler=function(){
                    var oldArgs=arguments;
                    if(oldArgs[0].originalEvent&&oldArgs[0].originalEvent.touches){
                        oldArgs[0].touches=oldArgs[0].originalEvent.touches;
                        oldArgs[0].changedTouches=oldArgs[0].originalEvent.changedTouches;
                        oldArgs[0].targetTouches=oldArgs[0].originalEvent.targetTouches;
                    }
                    oldHandler.apply(self,oldArgs);
                };
                oldHandler.__newWrapperFunction = handler;
            }
            arguments[2]=handler;
            oldAdd.apply($, arguments);
        };
    
        var oldRemove=$.event.remove;
        $.event.remove=function(){
            if(arguments[2] && arguments[2].__newWrapperFunction) {
                arguments[2]=arguments[2].__newWrapperFunction;
            }
            oldRemove.apply($,arguments);
        }
    

Anmelden zum Antworten