2012-04-17 78 views
2

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

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($) { 

回答

0

贾斯汀的代码几乎是文档所说的。但是当你在IE6,7,8中使用API​​重新编码图像时,它会执行一次然后结束。为什么?因为IE有问题。

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

在脚本的最外面部分定义你的api。

var jcrop_api; 

然后,当你需要uplaoding在同一页上后启动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(); 
+0

好的提示。对于长期拖延回来感到抱歉。 – 2012-06-14 22:31:13

+0

@ppumkin:你能给我们一个jsfiddle链接吗? – 2015-05-09 10:09:17

+0

@Persian。你有问题与IE浏览器?只需将'var jcrop_api'移动到全局名称空间。 – ppumkin 2015-05-09 10:13:29

0

请务必首先声明jcrop_api变量Jcrop调用的范围之内,像这样。列出的代码只会分配一个变量。如果您仍然怀疑回调正在执行,请将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; 
    }); 
}