未调用来自 jcrop 的回调

Posted

技术标签:

【中文标题】未调用来自 jcrop 的回调【英文标题】:Callback from jcrop not being called 【发布时间】:2012-04-17 18:40:37 【问题描述】:

我正在使用最新版本的 jquery.jcrop。在图像上调用 jcrop() 时,裁剪工作但不会调用回调。这使得无法设置 jcrop_api 以供以后使用。具体来说,我希望能够更改图像并需要 destroy() 方法。

function setJCrop() 
    //Set image for cropping
    jQuery('#preview').Jcrop( 
        minSize : [126, 126],
        setSelect : [ 0, 0, 126, 126 ],
        //onChange: updateMeasurements,
        onSelect: updateMeasurements,
        aspectRatio: 1
    , function() 
        jcrop_api = this;  //callback not being called
     );

当切换到 jQuery 就绪函数的这个调用时开始发生这种情况:

jQuery(document).ready(function($) 

【问题讨论】:

【参考方案1】:

贾斯汀的代码几乎就是文档所说的。但是,当您使用 IE6、7、8 中的 API 重新加载图像时,它会执行一次然后跌倒。为什么?因为IE有问题。

更兼容的启动API的方式应该是这样。

在脚本的最外层定义您的 api。

var jcrop_api;

然后当你需要启动 API 时,例如在同一页面上上传之后.. 你这样做(这行是让 IE 和其他奇怪的浏览器开心的原因)我使用两个标签,因为有时我的裁剪器用于一个母版页,我只留下它作为示例。我也没有设置任何选项,但如果你愿意,你可以。

jcrop_api = $.Jcrop($('#SourceImage, #body_SourceImage'), );

然后你可以为每张图片启动裁剪器

       jcrop_api.setOptions(
            boxWidth: 500,
            onSelect: updateCoords,
            minSize: [thisImage.Min.Width, thisImage.Min.Height],
            aspectRatio: thisImage.AspectRatio  //1.3 for example
        );
        jcrop_api.setImage(uploadLocation + fileName);

重要的是,当您完成裁剪后,您必须销毁 API,然后重新启动它。再次 - 只是为了让所有浏览器都满意。

 jcrop_api.destroy();

【讨论】:

好建议。很抱歉这么久才回来。 @ppumkin : 你能给我们一个 jsfiddle 链接吗? @Persian。你的IE有问题吗?只需将 var jcrop_api 移动到全局命名空间中即可。 我也有同样的情况,但无法调整大图大小Jcrop.load('target').then(img => jcp = Jcrop.attach(img, multi: true ); Jcrop.setOptions( boxWidth: 500, minSize: [200, 300], ); );【参考方案2】:

确保首先在 Jcrop 调用范围之外声明 jcrop_api 变量,就像这样。列出的代码只会分配一个变量。如果您仍然怀疑回调正在执行,请将alert() 放在那里进行测试。

var jcrop_api;

function setJCrop() 
    //Set image for cropping
    $('#preview').Jcrop( 
        minSize : [126, 126],
        setSelect : [ 0, 0, 126, 126 ],
        //onChange: updateMeasurements,
        onSelect: updateMeasurements,
        aspectRatio: 1
    ,function()
      jcrop_api = this;
     );

【讨论】:

以上是关于未调用来自 jcrop 的回调的主要内容,如果未能解决你的问题,请参考以下文章

裁剪插件jCrop

jCrop 没有被调用。

获取“来自本机模块的非法回调调用。此回调类型仅允许从本机代码进行一次调用”

未调用 PHP 流通知回调

CompanionDeviceManager 'onDeviceFound' 回调函数未被调用

护照 jwt 验证回调未调用