2011-11-15 3 views
8

JQueryUI에서 크기 조정을 동적으로 설정/해제하려고했지만 false로 설정 한 후에도 가로 세로 비율을 유지합니다. 아래는 내가 현재 작업하고있는 코드는 다음과 같습니다 초기화 후 JqueryUI Resizable AspectRatio를 적용 할 수 없습니까?

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

는 나는 여전히 중요한 표시에도 불구하고 해결되지 않은 것 같습니다 전에 삼년에서 버그 리포트를 발견했다. http://bugs.jqueryui.com/ticket/4186

해결 방법은 최신 버전에서 작동하지 않습니다. 어떤 아이디어?

편집 :

$(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"])); 
}); 

이 자바 스크립트 스크립트 섹션에 붙여 넣 버그 리포트를 많이 겪고 후, 여기 주위의 작품이다. 희망 그것은 비슷한 문제를 가진 사람을 도와주세요!

+0

대한 수정 작업을 온다! 감사합니다 – willDaBeast

+0

해결 방법은 긍정적 인'originalPosition'에서만 작동합니다. 어떤 생각을 부정적인 가치로도 작동하게 만드는 방법은 무엇입니까? – Core972

답변

1

작동 여부 또는 진행 여부는 알 수 없습니다. 그러나 당신은 이와 같은 것을 시도 할 수 있습니다.

$(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); 
     } 
    }); 
}); 

라이브 데모, 현재는 아래쪽 드래그 가능 요소 만 사용하도록 스타일이 지정되어 있으며, 가로 div는 스타일이 적용되지 않습니다.

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

+0

@Niels가 응답 해 주셔서 감사합니다.이 예제는 수동으로 설정하는 것과 동일한 효과를 보여 주지만 버그 보고서를 몇 시간 씩 지나서 마침내 다른 해결 방법을 찾았습니다. 같은 신발에 다른 사람들을 위해 원래의 질문. 감사합니다! – Alvin

2

가 나는 이것이 이전 게시물입니다 실현하지만, 경우에 사람이 아직도 당신이 이런 식으로 작업을 수행 할 수 있습니다 응답을 필요로 :

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

또 다른 해결책이 변수에 크기 조정 옵션을 저장하는 것입니다 업데이트 옵션을 사용하여 위젯을 파괴하고 다시 초기화 :

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

을이 결코

패치와 나를 위해 일한3210
$('#resizable') 
    .resizable('option', 'aspectRatio', false) 
    .data('uiResizable')._aspectRatio = false; 

이 부분 .data('uiResizable')._aspectRatio = false;은 구조에

+1

탁월한 해킹, 그것은 나를 문제에서 벗어납니다! – Erick

관련 문제