[英]“Function factory” doesn't seem to work, JavaScript
我正在循环显示一系列图像,并且尝试实现某种裸体过滤器,因此我使用的是nude.js ,这是一个可以检测裸体的库。 这是代码:
// we're inside a loop
$(".images").prepend($("<img>").attr({src: whatever, id: uniqueid}).load(function(e) {
nude.load(e.target.id);
nude.scan(function(result) { if (!result) $(e.target).detach(); });
});
但是,它分离所有错误的图像,因为nude.js速度很慢,并且在循环进行到以后的迭代之后完成,从而分离了这些图像,而不是其正在处理的图像。
我试过使用函数工厂:
function generateCallback(arg) {
return function(result) { if (!result) $(arg).detach(); };
}
和
nude.scan( generateCallback(e.target) )
但同样的事情发生了。
我想要的是一个load
事件,如果它似乎包含裸露内容,它将删除该图像。 如何正确执行此操作?
编辑:nude.js是这样的:
nude.load(imageid);
nude.scan(callback); // it'll pass true or false into the callback
另一个编辑:意外地从我发布的代码中省略了id设置,但是它在我的真实代码中,所以我在这里添加了它。
您的脚本发生的事情是e var对函数而言是全局的,因此在每次循环后都将其替换为新循环。 因此,当扫描第一个图像时, e已经成为第二个图像的事件,该事件被分离。
要解决您的问题,请使用闭包。 如果您想进一步了解闭包,请在这里查看 。 否则,这是您的问题的解决方案:
$(".images").prepend($("<img>").attr({src: whatever, id: uniqueid}).load(function(e) {
(function(e) {
nude.load(e.target.id);
nude.scan(function(result) { if (!result) $(e.target).detach(); });
}) (e);
});
编辑:正如nick_w所说,有一个包含回调的var,每次都可能被替换,因此这就是为什么分离正确图片的原因。 您可能必须自己修改脚本
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.