2011-11-15 16 views
8

Tôi đã cố gắng bật/tắt tỷ lệ khung hình một cách linh hoạt trong JQueryUI có thể thay đổi kích thước, tuy nhiên, ngay cả sau khi đặt tùy chọn thành false, nó vẫn duy trì tỷ lệ khung hình. Dưới đây là mã tôi hiện đang làm việc với:Không thể áp dụng JqueryUI Resizable AspectRatio sau khi khởi tạo?

$('#aspect_check').click(function() { 
    var ischecked = $('#aspect_check').prop('checked'); 
    if (ischecked) { 
    $("#resizable").resizable("option", "aspectRatio", .75); 
    } else { 
     $("#resizable").resizable("option", "aspectRatio", false); 
    } 
}); 

Tôi đã tìm thấy báo cáo lỗi từ 3 năm trước, có vẻ như nó vẫn chưa được khắc phục mặc dù đánh dấu là quan trọng. http://bugs.jqueryui.com/ticket/4186

Cách giải quyết không hoạt động với các phiên bản mới nhất. Ý tưởng nào?

Edit: Sau khi trải qua rất nhiều báo cáo lỗi, đây là một công trình xung quanh:

$(function() { 
$.extend($.ui.resizable.prototype, (function (orig) { 
    return { 
     _mouseStart: function (event) { 
      this._aspectRatio = !!(this.options.aspectRatio); 
      return(orig.call(this, event)); 
     } 
    }; 
})($.ui.resizable.prototype["_mouseStart"])); 
}); 

Dán nó trong phần kịch bản javascript của bạn. Hy vọng nó sẽ giúp ai đó với vấn đề tương tự!

+0

chỉnh sửa công trình của bạn! Cảm ơn – willDaBeast

+0

Cách giải quyết chỉ hoạt động với 'originalPosition' tích cực. Bất kỳ ý tưởng làm thế nào để làm cho nó hoạt động với giá trị tiêu cực quá? – Core972

Trả lời

1

Tôi không biết nếu nó sẽ hoạt động hoặc những gì sẽ xảy ra. Nhưng bạn có thể thử một cái gì đó như thế này.

$(function(){ 
    var settings = { 
     aspectRatio : .75 
    }; 
    $("#tadaa").resizable(settings); 

    $("input").change(function(){ 
     if($(this).is(":checked")) 
     { 

      $("#tadaa").resizable("destroy"); 
      $("#tadaa").resizable(); 
     } 
     else 
     { 
      $("#tadaa").resizable("destroy"); 
      $("#tadaa").resizable(settings); 
     } 
    }); 
}); 

Bản trình diễn trực tiếp, hiện tại chỉ phần tử có thể kéo dưới cùng được thiết kế để sử dụng, div ngang không được tạo kiểu.

http://jsfiddle.net/t6xFN/1/

+0

Cảm ơn bạn đã phản hồi @Niels, ví dụ này dường như không hoạt động mặc dù: (Nó cho thấy tác dụng tương tự của thiết lập nó bằng tay. Tuy nhiên sau khi trải qua nhiều giờ báo cáo lỗi, cuối cùng tôi đã tìm thấy một công việc xung quanh. câu hỏi gốc với nó cho những người khác trong cùng một chiếc giày. Cảm ơn một lần nữa – Alvin

2

tôi nhận ra rằng đây là một bài cũ nhưng trong trường hợp bất cứ ai vẫn cần một câu trả lời, bạn có thể làm điều đó như thế này:

$('#aspect_check').click(function() { 
    var ischecked = $('#aspect_check').prop('checked'); 
    if (ischecked) { 
     $("#resizable").resizable({aspectRatio : .75}); 
    } else { 
     $("#resizable").resizable(); 
    } 
}); 
0

Một giải pháp khác là để tiết kiệm tùy chọn thay đổi kích thước trong một biến và phá hủy và reinitialize widget với các tùy chọn Cập nhật:

var options = $("#resizable").resizable("options"); 
if (ischecked) { 
    options.aspectRatio = .75; 
} else { 
    options.aspectRatio = false; 
} 
$("#resizable").resizable("destroy"); 
$("#resizable").resizable(options); 
10

này làm việc cho tôi không có vá

$('#resizable') 
    .resizable('option', 'aspectRatio', false) 
    .data('uiResizable')._aspectRatio = false; 

này phần .data('uiResizable')._aspectRatio = false; đến để giải thoát

+1

Tuyệt vời hack, nó đưa tôi ra khỏi một vấn đề! – Erick

Các vấn đề liên quan