2012-04-17 38 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; 
    }); 
}