来自jcrop的回调未被调用

时间:2012-04-17 18:40:38

标签: jquery jcrop

我正在使用最新版本的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 ready函数的调用时,这开始发生了:

jQuery(document).ready(function($) {

2 个答案:

答案 0 :(得分:0)

确保首先在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;
    } );
}

答案 1 :(得分:0)

贾斯汀的代码几乎就是文档所说的。但是当你进入reolaoding图像时,我们会在IE6,7,8中使用它,然后它就会失败。为什么?因为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();