Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中为id创建函数_Javascript_Jquery_Html - Fatal编程技术网

在javascript中为id创建函数

在javascript中为id创建函数,javascript,jquery,html,Javascript,Jquery,Html,我目前有一个带有href属性的HTML按钮,我为它定义了一个名为“触发器关闭”的id: 在此html页面中包含的文件中有一个javascript页面,其中包含菜单系统的对象和函数。我希望“触发器关闭”使这个对象执行,以便它关闭菜单。这是物体 // close the menu _resetMenu : function() { this._setTransform('translate3d(0,0,0)'); this.level = 0;

我目前有一个带有href属性的HTML按钮,我为它定义了一个名为“触发器关闭”的id:

在此html页面中包含的文件中有一个javascript页面,其中包含菜单系统的对象和函数。我希望“触发器关闭”使这个对象执行,以便它关闭菜单。这是物体

// close the menu
    _resetMenu : function() {
        this._setTransform('translate3d(0,0,0)');
        this.level = 0;
        // remove class mp-pushed from main wrapper
        classie.remove( this.wrapper, 'mp-pushed' );
        this._toggleLevels();
        this.open = false;
    },
我相信我需要修改包含所有函数的js文件,以某种方式声明如果单击了“trigger close”,然后执行重置菜单我试图修改上面的语句

if (id === 'trigger2') {
      self._resetMenu;
}
此外,我还提供了触发cls,您可以从下面的整个摘录中注意到

我希望这是有意义的,并且是简洁的。我很感激这里的任何帮助

我认为包含js文件的主要结构很重要,这样可以看到语法的树状视图。这是:

;( function( window ) {

'use strict';

function extend( a, b ) {
    for( var key in b ) { 
        if( b.hasOwnProperty( key ) ) {
            a[key] = b[key];
        }
    }
    return a;
}

// taken from https://github.com/inuyaksa/jquery.nicescroll/blob/master/jquery.nicescroll.js
function hasParent( e, id ) {
    if (!e) return false;
    var el = e.target||e.srcElement||e||false;
    while (el && el.id != id) {
        el = el.parentNode||false;
    }
    return (el!==false);
}

// returns the depth of the element "e" relative to element with id=id
// for this calculation only parents with classname = waypoint are considered
function getLevelDepth( e, id, waypoint, cnt ) {
    cnt = cnt || 0;
    if ( e.id.indexOf( id ) >= 0 ) return cnt;
    if( classie.has( e, waypoint ) ) {
        ++cnt;
    }
    return e.parentNode && getLevelDepth( e.parentNode, id, waypoint, cnt );
}


// returns the closest element to 'e' that has class "classname"
function closest( e, classname ) {
    if( classie.has( e, classname ) ) {
        return e;
    }
    return e.parentNode && closest( e.parentNode, classname );
}

function mlPushMenu( el, trigger, options ) {   
    this.el = el;
    this.trigger = trigger;
   this.trigger-cls = trigger-cls;
    this.options = extend( this.defaults, options );
    // support 3d transforms
    this.support = Modernizr.csstransforms3d;
    if( this.support ) {
        this._init();
    }
}


mlPushMenu.prototype = {
    defaults : {
        // overlap: there will be a gap between open levels
        // cover: the open levels will be on top of any previous open level
        type : 'overlap', // overlap || cover
        // space between each overlaped level
        levelSpacing : 40,
        // classname for the element (if any) that when clicked closes the current level
        backClass : 'mp-back'
    },
    _init : function() {
        // if menu is open or not
        this.open = false;
        // level depth
        this.level = 0;
        // the moving wrapper
        this.wrapper = document.getElementById( 'mp-pusher' );
        // the mp-level elements
        this.levels = Array.prototype.slice.call( this.el.querySelectorAll( 'div.mp-level' ) );
        // save the depth of each of these mp-level elements
        var self = this;
        this.levels.forEach( function( el, i ) { el.setAttribute( 'data-level', getLevelDepth( el, self.el.id, 'mp-level' ) ); } );
        // the menu items
        this.menuItems = Array.prototype.slice.call( this.el.querySelectorAll( 'li' ) );
        // if type == "cover" these will serve as hooks to move back to the previous level
        this.levelBack = Array.prototype.slice.call( this.el.querySelectorAll( '.' + this.options.backClass ) );
        // event type (if mobile use touch events)
        this.eventtype = mobilecheck() ? 'touchstart' : 'click';
        // add the class mp-overlap or mp-cover to the main element depending on options.type
        classie.add( this.el, 'mp-' + this.options.type );
        // initialize / bind the necessary events
        this._initEvents();
    },
    _initEvents : function() {
        var self = this;

        // the menu should close if clicking somewhere on the body
        var bodyClickFn = function( el ) {
            self._resetMenu();
            el.removeEveentListener( self.eventtype, bodyClickFn );
        };




        // open (or close) the menu
        this.trigger.addEventListener( this.eventtype, function( ev ) {
            ev.stopPropagation();
            ev.preventDefault();
            if( self.open ) {
                self._resetMenu();
            }
            else {
                self._openMenu();
                // the menu should close if clicking somewhere on the body (excluding clicks on the menu)
                document.addEventListener( self.eventtype, function( ev ) {
                    if( self.open && !hasParent( ev.target, self.el.id ) ) {
                        bodyClickFn( this );
                    }
                } );
            }
        } );

        // opening a sub level menu
        this.menuItems.forEach( function( el, i ) {
            // check if it has a sub level
            var subLevel = el.querySelector( 'div.mp-level' );
            if( subLevel ) {
                el.querySelector( 'a' ).addEventListener( self.eventtype, function( ev ) {
                    ev.preventDefault();
                    var level = closest( el, 'mp-level' ).getAttribute( 'data-level' );
                    if( self.level <= level ) {
                        ev.stopPropagation();
                        classie.add( closest( el, 'mp-level' ), 'mp-level-overlay' );
                        self._openMenu( subLevel );
                    }
                } );
            }
        } );

        // closing the sub levels :
        // by clicking on the visible part of the level element
        this.levels.forEach( function( el, i ) {
            el.addEventListener( self.eventtype, function( ev ) {
                ev.stopPropagation();
                var level = el.getAttribute( 'data-level' );
                if( self.level > level ) {
                    self.level = level;
                    self._closeMenu();
                }
            } );
        } );

        // by clicking on a specific element
        this.levelBack.forEach( function( el, i ) {
            el.addEventListener( self.eventtype, function( ev ) {
                ev.preventDefault();
                var level = closest( el, 'mp-level' ).getAttribute( 'data-level' );
                if( self.level <= level ) {
                    ev.stopPropagation();
                    self.level = closest( el, 'mp-level' ).getAttribute( 'data-level' ) - 1;
                    self.level === 0 ? self._resetMenu() : self._closeMenu();
                }
            } );
        } );    
    },
    _openMenu : function( subLevel ) {
        // increment level depth
        ++this.level;

        // move the main wrapper
        var levelFactor = ( this.level - 1 ) * this.options.levelSpacing,
            translateVal = this.options.type === 'overlap' ? this.el.offsetWidth + levelFactor : this.el.offsetWidth;

        this._setTransform( 'translate3d(' + translateVal + 'px,0,0)' );

        if( subLevel ) {
            // reset transform for sublevel
            this._setTransform( '', subLevel );
            // need to reset the translate value for the level menus that have the same level depth and are not open
            for( var i = 0, len = this.levels.length; i < len; ++i ) {
                var levelEl = this.levels[i];
                if( levelEl != subLevel && !classie.has( levelEl, 'mp-level-open' ) ) {
                    this._setTransform( 'translate3d(-100%,0,0) translate3d(' + -1*levelFactor + 'px,0,0)', levelEl );
                }
            }
        }
        // add class mp-pushed to main wrapper if opening the first time
        if( this.level === 1 ) {
            classie.add( this.wrapper, 'mp-pushed' );
            this.open = true;
        }
        // add class mp-level-open to the opening level element
        classie.add( subLevel || this.levels[0], 'mp-level-open' );
    },
    // close the menu
    _resetMenu : function() {
        this._setTransform('translate3d(0,0,0)');
        this.level = 0;
        // remove class mp-pushed from main wrapper
        classie.remove( this.wrapper, 'mp-pushed' );
        this._toggleLevels();
        this.open = false;
    },
    // close sub menus
    _closeMenu : function() {
        var translateVal = this.options.type === 'overlap' ? this.el.offsetWidth + ( this.level - 1 ) * this.options.levelSpacing : this.el.offsetWidth;
        this._setTransform( 'translate3d(' + translateVal + 'px,0,0)' );
        this._toggleLevels();
    },
    // translate the el
    _setTransform : function( val, el ) {
        el = el || this.wrapper;
        el.style.WebkitTransform = val;
        el.style.MozTransform = val;
        el.style.transform = val;
    },
    // removes classes mp-level-open from closing levels
    _toggleLevels : function() {
        for( var i = 0, len = this.levels.length; i < len; ++i ) {
            var levelEl = this.levels[i];
            if( levelEl.getAttribute( 'data-level' ) >= this.level + 1 ) {
                classie.remove( levelEl, 'mp-level-open' );
                classie.remove( levelEl, 'mp-level-overlay' );
            }
            else if( Number( levelEl.getAttribute( 'data-level' ) ) == this.level ) {
                classie.remove( levelEl, 'mp-level-overlay' );
            }
        }
    }
}

// add to global namespace
window.mlPushMenu = mlPushMenu;

} )( window );
;(功能(窗口){
"严格使用",;
功能扩展(a,b){
对于(b中的var键){
如果(b.hasOwnProperty(键)){
a[键]=b[键];
}
}
返回a;
}
//取自https://github.com/inuyaksa/jquery.nicescroll/blob/master/jquery.nicescroll.js
函数hasParent(e,id){
如果(!e)返回false;
var el=e.target | | e.src元素| | e | | false;
while(el&&el.id!=id){
el=el.parentNode | | false;
}
返回(el!==false);
}
//返回元素“e”相对于id=id的元素的深度
//对于此计算,仅考虑classname=航路点的父级
函数getLevelDepth(e、id、航路点、cnt){
cnt=cnt | | 0;
如果(e.id.indexOf(id)>=0)返回cnt;
if(等级has(e,航路点)){
++碳纳米管;
}
返回e.parentNode&&getLevelDepth(e.parentNode,id,航路点,cnt);
}
//返回类为“classname”的与“e”最近的元素
函数最近(e,类名){
if(classie.has(e,classname)){
返回e;
}
返回e.parentNode&&最近(e.parentNode,classname);
}
功能mlPushMenu(el、触发器、选项){
this.el=el;
this.trigger=触发器;
this.trigger-cls=触发器cls;
this.options=extend(this.defaults,options);
//支持三维变换
this.support=modernizer.cstransform3d;
如果(这个支持){
这个;
}
}
mlPushMenu.prototype={
默认值:{
//重叠:开放水平之间将有一个间隙
//盖:开放式标高将位于任何先前开放式标高的顶部
键入:'重叠',//重叠| |覆盖
//每个重叠层之间的间距
水平间距:40,
//单击关闭当前级别的元素(如果有)的类名
backClass:“mp back”
},
_init:function(){
//菜单是否打开
this.open=false;
//水平深度
这个水平=0;
//移动包装器
this.wrapper=document.getElementById('mp pusher');
//mp级元素
this.levels=Array.prototype.slice.call(this.el.queryselectoral('div.mp-level');
//保存每个mp级别元素的深度
var self=这个;
this.levels.forEach(函数(el,i){el.setAttribute('data level',getLevelDepth(el,self.el.id,'mp level');});
//菜单项
this.menuItems=Array.prototype.slice.call(this.el.queryselectoral('li');
//如果type==“cover”,则这些将用作挂钩,以移回上一层
this.levelBack=Array.prototype.slice.call(this.el.queryselectoral('.'+this.options.backClass));
//事件类型(如果手机使用触摸事件)
this.eventtype=mobilecheck()?“touchstart”:“单击”;
//根据options.type,将mp重叠或mp覆盖类添加到主元素
classie.add(this.el,'mp-'+this.options.type);
//初始化/绑定必要的事件
这个;
},
_initEvents:function(){
var self=这个;
//如果单击车身上的某个位置,菜单应关闭
var bodyClickFn=功能(el){
self._resetMenu();
el.removeeventListener(self.eventtype,bodyClickFn);
};
//打开(或关闭)菜单
this.trigger.addEventListener(this.eventtype,函数(ev){
ev.stopPropagation();
ev.preventDefault();
if(self.open){
self._resetMenu();
}
否则{
self._openMenu();
//如果单击主体上的某个位置,菜单应关闭(不包括单击菜单)
document.addEventListener(self.eventtype,function(ev){
if(self.open&!hasParent(ev.target,self.el.id)){
bodyClickFn(这个);
}
} );
}
} );
//打开子级别菜单
this.menuItems.forEach(函数(el,i){
//检查它是否有子级别
var子级=el.querySelector('div.mp-level');
如果(次级){
el.querySelector('a').addEventListener(self.eventtype,function(ev){
ev.preventDefault();
变量级别=最近的(el,“mp级别”).getAttribute(“数据级别”);
如果(自我水平){
自我水平=水平;
self._closeMenu();
}
} );
} );
//通过单击特定元素
this.levelBack.forEach(函数(el,i){
el.addEventListener(self.eventtype,函数(ev){
ev.preventDefault();
变量级别=最近的(el,“mp级别”).getAttribute(“数据级别”);
如果(self.level=this.level+1){
等级移除(标高,“mp标高打开”);
clas
if (id === 'trigger2') {
      self._resetMenu;
}
;( function( window ) {

'use strict';

function extend( a, b ) {
    for( var key in b ) { 
        if( b.hasOwnProperty( key ) ) {
            a[key] = b[key];
        }
    }
    return a;
}

// taken from https://github.com/inuyaksa/jquery.nicescroll/blob/master/jquery.nicescroll.js
function hasParent( e, id ) {
    if (!e) return false;
    var el = e.target||e.srcElement||e||false;
    while (el && el.id != id) {
        el = el.parentNode||false;
    }
    return (el!==false);
}

// returns the depth of the element "e" relative to element with id=id
// for this calculation only parents with classname = waypoint are considered
function getLevelDepth( e, id, waypoint, cnt ) {
    cnt = cnt || 0;
    if ( e.id.indexOf( id ) >= 0 ) return cnt;
    if( classie.has( e, waypoint ) ) {
        ++cnt;
    }
    return e.parentNode && getLevelDepth( e.parentNode, id, waypoint, cnt );
}


// returns the closest element to 'e' that has class "classname"
function closest( e, classname ) {
    if( classie.has( e, classname ) ) {
        return e;
    }
    return e.parentNode && closest( e.parentNode, classname );
}

function mlPushMenu( el, trigger, options ) {   
    this.el = el;
    this.trigger = trigger;
   this.trigger-cls = trigger-cls;
    this.options = extend( this.defaults, options );
    // support 3d transforms
    this.support = Modernizr.csstransforms3d;
    if( this.support ) {
        this._init();
    }
}


mlPushMenu.prototype = {
    defaults : {
        // overlap: there will be a gap between open levels
        // cover: the open levels will be on top of any previous open level
        type : 'overlap', // overlap || cover
        // space between each overlaped level
        levelSpacing : 40,
        // classname for the element (if any) that when clicked closes the current level
        backClass : 'mp-back'
    },
    _init : function() {
        // if menu is open or not
        this.open = false;
        // level depth
        this.level = 0;
        // the moving wrapper
        this.wrapper = document.getElementById( 'mp-pusher' );
        // the mp-level elements
        this.levels = Array.prototype.slice.call( this.el.querySelectorAll( 'div.mp-level' ) );
        // save the depth of each of these mp-level elements
        var self = this;
        this.levels.forEach( function( el, i ) { el.setAttribute( 'data-level', getLevelDepth( el, self.el.id, 'mp-level' ) ); } );
        // the menu items
        this.menuItems = Array.prototype.slice.call( this.el.querySelectorAll( 'li' ) );
        // if type == "cover" these will serve as hooks to move back to the previous level
        this.levelBack = Array.prototype.slice.call( this.el.querySelectorAll( '.' + this.options.backClass ) );
        // event type (if mobile use touch events)
        this.eventtype = mobilecheck() ? 'touchstart' : 'click';
        // add the class mp-overlap or mp-cover to the main element depending on options.type
        classie.add( this.el, 'mp-' + this.options.type );
        // initialize / bind the necessary events
        this._initEvents();
    },
    _initEvents : function() {
        var self = this;

        // the menu should close if clicking somewhere on the body
        var bodyClickFn = function( el ) {
            self._resetMenu();
            el.removeEveentListener( self.eventtype, bodyClickFn );
        };




        // open (or close) the menu
        this.trigger.addEventListener( this.eventtype, function( ev ) {
            ev.stopPropagation();
            ev.preventDefault();
            if( self.open ) {
                self._resetMenu();
            }
            else {
                self._openMenu();
                // the menu should close if clicking somewhere on the body (excluding clicks on the menu)
                document.addEventListener( self.eventtype, function( ev ) {
                    if( self.open && !hasParent( ev.target, self.el.id ) ) {
                        bodyClickFn( this );
                    }
                } );
            }
        } );

        // opening a sub level menu
        this.menuItems.forEach( function( el, i ) {
            // check if it has a sub level
            var subLevel = el.querySelector( 'div.mp-level' );
            if( subLevel ) {
                el.querySelector( 'a' ).addEventListener( self.eventtype, function( ev ) {
                    ev.preventDefault();
                    var level = closest( el, 'mp-level' ).getAttribute( 'data-level' );
                    if( self.level <= level ) {
                        ev.stopPropagation();
                        classie.add( closest( el, 'mp-level' ), 'mp-level-overlay' );
                        self._openMenu( subLevel );
                    }
                } );
            }
        } );

        // closing the sub levels :
        // by clicking on the visible part of the level element
        this.levels.forEach( function( el, i ) {
            el.addEventListener( self.eventtype, function( ev ) {
                ev.stopPropagation();
                var level = el.getAttribute( 'data-level' );
                if( self.level > level ) {
                    self.level = level;
                    self._closeMenu();
                }
            } );
        } );

        // by clicking on a specific element
        this.levelBack.forEach( function( el, i ) {
            el.addEventListener( self.eventtype, function( ev ) {
                ev.preventDefault();
                var level = closest( el, 'mp-level' ).getAttribute( 'data-level' );
                if( self.level <= level ) {
                    ev.stopPropagation();
                    self.level = closest( el, 'mp-level' ).getAttribute( 'data-level' ) - 1;
                    self.level === 0 ? self._resetMenu() : self._closeMenu();
                }
            } );
        } );    
    },
    _openMenu : function( subLevel ) {
        // increment level depth
        ++this.level;

        // move the main wrapper
        var levelFactor = ( this.level - 1 ) * this.options.levelSpacing,
            translateVal = this.options.type === 'overlap' ? this.el.offsetWidth + levelFactor : this.el.offsetWidth;

        this._setTransform( 'translate3d(' + translateVal + 'px,0,0)' );

        if( subLevel ) {
            // reset transform for sublevel
            this._setTransform( '', subLevel );
            // need to reset the translate value for the level menus that have the same level depth and are not open
            for( var i = 0, len = this.levels.length; i < len; ++i ) {
                var levelEl = this.levels[i];
                if( levelEl != subLevel && !classie.has( levelEl, 'mp-level-open' ) ) {
                    this._setTransform( 'translate3d(-100%,0,0) translate3d(' + -1*levelFactor + 'px,0,0)', levelEl );
                }
            }
        }
        // add class mp-pushed to main wrapper if opening the first time
        if( this.level === 1 ) {
            classie.add( this.wrapper, 'mp-pushed' );
            this.open = true;
        }
        // add class mp-level-open to the opening level element
        classie.add( subLevel || this.levels[0], 'mp-level-open' );
    },
    // close the menu
    _resetMenu : function() {
        this._setTransform('translate3d(0,0,0)');
        this.level = 0;
        // remove class mp-pushed from main wrapper
        classie.remove( this.wrapper, 'mp-pushed' );
        this._toggleLevels();
        this.open = false;
    },
    // close sub menus
    _closeMenu : function() {
        var translateVal = this.options.type === 'overlap' ? this.el.offsetWidth + ( this.level - 1 ) * this.options.levelSpacing : this.el.offsetWidth;
        this._setTransform( 'translate3d(' + translateVal + 'px,0,0)' );
        this._toggleLevels();
    },
    // translate the el
    _setTransform : function( val, el ) {
        el = el || this.wrapper;
        el.style.WebkitTransform = val;
        el.style.MozTransform = val;
        el.style.transform = val;
    },
    // removes classes mp-level-open from closing levels
    _toggleLevels : function() {
        for( var i = 0, len = this.levels.length; i < len; ++i ) {
            var levelEl = this.levels[i];
            if( levelEl.getAttribute( 'data-level' ) >= this.level + 1 ) {
                classie.remove( levelEl, 'mp-level-open' );
                classie.remove( levelEl, 'mp-level-overlay' );
            }
            else if( Number( levelEl.getAttribute( 'data-level' ) ) == this.level ) {
                classie.remove( levelEl, 'mp-level-overlay' );
            }
        }
    }
}

// add to global namespace
window.mlPushMenu = mlPushMenu;

} )( window );