gpt4 book ai didi

javascript - 作为匿名函数的默认事件处理程序与函数名称之间有什么区别

转载 作者:行者123 更新时间:2023-12-02 18:31:02 25 4
gpt4 key购买 nike

我正在修改 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 函数时,出现无法加载错误。这里的默认处理程序与函数调用有什么区别?我知道它将用作以前意义上的回调,但这里不应该是相同的吗?或者是否有一些默认参数被传递到幕后运行。我尝试过传递这个,即 run(this) 但 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 - 作为匿名函数的默认事件处理程序与函数名称之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17792281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com