2011-11-15 14 views
8

JQueryUI cinsinden en boy oranlarını dinamik olarak açıp/kapatmaya çalışıyordum, ancak seçeneği yanlış ayarlandıktan sonra bile en boy oranını koruyor. Aşağıda Şu anda ile çalışıyorum kodudur: Başlatmadan sonra JqueryUI Resizable AspectRatio uygulanamaz mı?

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

ben hala kritik işaretleme rağmen sabit değil gibi görünüyor önce 3 yaşındaki bir hata raporu buldu. http://bugs.jqueryui.com/ticket/4186

Çözümler en son sürümlerle çalışmaz. Herhangi bir fikir?

Düzenleme:

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

sizin javascript script bölümünde yapıştırın: hata raporları bir sürü geçmekte sonra buralarda bir çalışmadır. Umarım benzer sorunu olan birine yardımcı olur!

+0

Düzenlemenizin eserler geliyor! Teşekkürler – willDaBeast

+0

Geçici çözüm yalnızca olumlu 'originalPosition' ile çalışır. Olumlu bir değerle nasıl çalışılacağı hakkında bir fikrin var mı? – Core972

cevap

1

Çalışır mı, yoksa ne olup olmayacağını bilmiyorum. Ama böyle bir şey deneyebilirsin.

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

Canlı demo, şu anda yalnızca alt sürülebilir öğe kullanılacak şekilde biçimlendirilmiş, yatay div şekillendirilmemiş.

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

+0

@Niels yanıtı için teşekkürler, örnek işe yaramıyor gibi görünmüyor :(. Bu, manuel olarak ayarlamanın aynı etkisini gösterir.Ama hata raporları saat geçtikten sonra, sonunda başka bir iş buldum. Aynı ayakkabıda başkaları için onunla özgün bir soru.Teşekkürler! – Alvin

2

Bu eski bir yazı olduğunu fark ama durumda herkes hala böyle yapabilirsin bir cevap gerekiyor:

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

Başka bir çözüm bir değişkene boyutlandırılabilir seçenekleri kurtarmaktır ve güncellenmiş seçeneklerle widget'ı yok etmek ve yeniden başlatmak:

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

Bu, hiçbir

yama ile benim için çalıştı
$('#resizable') 
    .resizable('option', 'aspectRatio', false) 
    .data('uiResizable')._aspectRatio = false; 

Bu bölüm .data('uiResizable')._aspectRatio = false; kurtarmaya

+1

Mükemmel hack, beni bir sorundan çıkar! – Erick

İlgili konular