什么's作为匿名函数的默认事件处理程序与函数名称之间的区别
What's the difference between default event handler as an anonymous function vs function name
我正在修改一个版本的fancybox,以便在运行函数之前先执行一些代码。我想我可以把代码放在run函数中,但我想知道为什么我可以做以下操作我关心的原始行:
D.undelegate(selector, 'touchstart.fb-start click.fb-start').delegate(selector, 'touchstart.fb-start click.fb-start', run);
我想做以下事情:
D.undelegate(selector, 'touchstart.fb-start click.fb-start').delegate(selector, 'touchstart.fb-start click.fb-start', function(){ /*do something */ run(); });
不幸的是,当我尝试像这样运行run函数时,我遇到了一个无法加载的错误。在这里使用默认处理程序和使用函数调用有什么区别?我知道它将被用作以前意义上的回调,但这里不应该是一样的吗?或者是否有一些默认参数被传递到后台运行中。我试着通过这个,也就是说,运行(这个),但fancybox仍然失败了。有什么想法吗?
较大的原始来源:
// jQuery plugin initialization
$.fn.fancybox = function (options) {
var opts = options || {},
selector = this.selector || '';
function run() {
var group = [], relType = false, relVal = $(this).data('fancybox-group');
// Check if element has 'data-fancybox-group' attribute, if not - use 'rel'
if (typeof relVal !== 'undefined') {
relType = relVal ? 'data-fancybox-group' : false;
} else if (this.rel && this.rel !== '' && this.rel !== 'nofollow') {
relVal = this.rel;
relType = 'rel';
}
if (relType) {
group = selector.length ? $(selector).filter('[' + relType + '="' + relVal + '"]') : $('[' + relType + '="' + relVal + '"]');
}
if (group.length) {
opts.index = group.index(this);
F.open(group.get(), opts);
} else {
F.open(this, opts);
}
return false;
}
if (selector) {
D.undelegate(selector, 'touchstart.fb-start click.fb-start').delegate(selector, 'touchstart.fb-start click.fb-start', run);
} else {
$(this).unbind('click.fb-start').bind('click.fb-start', run);
}
return this;
};
试试这个:
D.undelegate(selector, 'touchstart.fb-start click.fb-start')
.delegate(selector, 'touchstart.fb-start click.fb-start',
function(){
/*do something */
run.call(this);
});
您必须确保"run"函数的this
设置为预期的编写方式。换句话说,库确保调用的函数的this
设置为相关的对象(fancybox对象或其他对象)。当您插入这样的匿名函数时,您的函数也会被这样调用。您需要将this
的值传递给已经存在的函数。
相关文章:
- 如何远程检查JavaScript应用程序的函数调用堆栈
- 在同一个javascript事件处理程序中调用不同的函数
- 为什么这个函数调用会破坏程序并导致未定义的变量
- Backbone listenTo不将jquery函数作为处理程序进行激发
- Jquery事件处理程序仅适用于匿名函数
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 如何将某个“;函数“;在Node.js的网络应用程序中
- 为什么有些jQuery程序员使用像$.get、$.getJSON和$.when这样的jQuery函数来代替$.ajax
- 构造函数中的事件处理程序与构造函数外的事件处理函数的行为不同
- 函数打开链接时不使用弹出窗口阻止程序
- 使用jqGrid列格式化程序函数使ng-click工作
- 向调用全局javascript函数的对象添加处理程序
- 将参数传递给函数,同时保留事件处理程序
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么
- Node Express Handlebars帮助程序未返回函数的结果
- 当调用JS函数具有alert()时,应用程序将被冻结
- 事件处理程序绑定到匿名函数与命名函数
- 如何根据JavaScript函数的结果用PHP编写数据库?(FB应用程序)
- Javascript函数程序