如何重用jQuery对象(新手)

时间:2012-02-27 16:43:10

标签: javascript jquery

如何在实例化对象后正确访问该对象:

我正在实施jCrop并需要在页面上运行两次 - (第一次设置默认框和第二次设置图像中间的框)

所以我需要创建jCrop对象,以后能够访问它的属性,到目前为止这是我的代码:

    var myJcrop;
if (cropperInit == true) {
    getjCropSize();

    //Start up jCrop on the image, specifying our function be called when the selection rectangle changes,
    myJcrop = image.Jcrop({
        setSelect: [10, 10, 50, 50],
        aspectRatio: 1,
        onChange: update,
        onSelect: update,
        bgFade: 'true'
    });
} else {
    alert("cropperInit = false");
    myJcrop({
        setSelect: [startX, startY, boxWH, boxWH],
        aspectRatio: 1,
        onChange: update,
        onSelect: update,
        bgFade: 'true'
    });
}

jCrop对象在第一个'if块'中创建好,但第二个'else if'块不起作用。

修改

在深入研究之后,jCrop有一个API,它的用法如下:

var jCropApi;
image.Jcrop({
    setSelect: [10, 10, 10, 10],
    aspectRatio: 1,
    onChange: update,
    onSelect: update,
    bgFade: 'true'
}, function () {
    jCropApi = this;
});

jCropApi.animateTo([startX, startY, boxWH, boxWH]);

感谢大家的帮助

3 个答案:

答案 0 :(得分:3)

在你的其他条款中你没有使用myJcrop = image.Jcrop({,你只是在写myJcrop({。换句话说,您只是在第一个子句中创建一个对象。

您甚至不需要在每个子句中声明对象,为什么不调整变量:

var myJcrop;

if (cropperInit == true) {
    getjCropSize();
    var setSelectArray = [10, 10, 50, 50];
} else {
    alert("cropperInit = false");
    // Make sure startX, startY, etc. are set
    var setSelectArray = [startX, startY, boxWH, boxWH],
}
myJcrop = image.Jcrop({
   setSelect: setSelectArray,
   aspectRatio: 1,
   onChange: update,
   onSelect: update,
   bgFade: 'true'
});

答案 1 :(得分:1)

这两个代码块是独占的,只有其中一个应该运行,所以如果逻辑流经else块,你认为在if块中创建的jCrop对象永远不会被创建。

您需要将jCrop对象声明为每个逻辑块中的新对象。

答案 2 :(得分:1)

你可以这样做:

var myJcrop;

if (cropperInit == true) {
    getjCropSize();

    //Start up jCrop on the image, specifying our function be called when the selection rectangle changes,
    var options = {
        setSelect: [10, 10, 50, 50],
        aspectRatio: 1,
        onChange: update,
        onSelect: update,
        bgFade: 'true'
    };
} else {
    alert("cropperInit = false");
    options = {
        setSelect: [startX, startY, boxWH, boxWH],
        aspectRatio: 1,
        onChange: update,
        onSelect: update,
        bgFade: 'true'
    };
}

myJcrop = image.Jcrop(options);